Nesta segunda parte do artigo irei demonstrar outros comandos SQL, além de mostrar como manter a integridade em suas tabelas e como tornar o seu banco de dados mais seguro.
Uma subquery é um comando SELECT inserido em uma cláusula de um
outro comando SQL. Pode-se desenvolver comandos sofisticados a partir
de comandos simples, utilizando-se subqueries. Elas podem ser muito
úteis quando for necessário selecionar linha a partir de uma tabela com uma condição que dependa de dados na própria tabela.
Sintaxe do comando
SELECT campo FROM tabela
WHERE expr operator
(SELECT campo FROM tabela);
operator: inclui um operador de comparação como >, =, ou IN.
OBS: os operadores de comparação situam-se em duas classes: operadores de linha única (>, =, >=, <, <>, <=) e operadores de várias linhas (IN, NOT IN).
A subquery geralmente é identificada como um comando aninhado SELECT, sub-SELECT, ou SELECT interno. Em geral, ela é executada primeiro e seu resultado é usado para completar a condição de pesquisa para a pesquisa primária ou externa.
Regras Gerais
A subquery deve ser colocada entre parênteses;
A subquery deve ser colocada depois de um operador de comparação.
Uma cláusula ORDER BY não deve ser incluída em uma subquery.
Exemplo:
mysql> SELECT cidade FROM alunos WHERE matricula > (SELECT matricula FROM alunos where nome='Jefferson');
// primeiro descobrirá a matricula de Jefferson, depois irá exibir o nome de todas as cidades que tenham o registro matricula maior que a de Jefferson.
Veja q troquei o retorno da query
removi o $ do campo order
fiz com q o retorno da função sum, seja armazenado um um alias chamado soma
com o fetch_array, peguei as colunas q vem da query
o comando fetch cria um array e mandei o valor da coluna para
a variavel $soma
[4] Comentário enviado por ft_xavier em 17/02/2005 - 11:43h
Pessoal,
Segui os passos desse excelente artigo sobre manipulacao do mysql para criar uma databse, usuario e definir o acesso dele a somente essa database criada. Só que porem, ele ainda continua a ver as demais e ter acesso a elas. Como posso fazer pra resolver isso ???
[5] Comentário enviado por jeffestanislau em 17/02/2005 - 15:14h
ft_xavier,
Você me enviou este comentário estando na página 7, tabela user, aqui você cria o usuário para acessar o mysql como um todo...
Se quer prender o usuário em uma única tabela, você também deve criar o usuário na tbela DB, descrevendo seu nome de acesso e a tabela ao qual ele pode acessar...
[7] Comentário enviado por kl31n em 09/03/2005 - 00:15h
Ok......legal o artigo....
mas gostaria de saber tipo.....
se existem StoredProcedures no MySql
ou como o MySql trata as operações
para fazer com que realmente aconteça
o Client-Server
tipo...o sistema manda as informações e
o BG eh que grava elas e se vira com tudo.......
[8] Comentário enviado por Hernando em 03/05/2005 - 11:01h
Mais uma vez gostaria de agradece-lo pela presteza nos artigos... e acredito que assim esteje concluido o mini manual ajudando a todos que queiram ingressar no mundo do MySQL... Queria dar a dica que abra um novo artigo dizendo sobre injeção de sql para que todos que sigam esse artigo possam se previnir antes de serem prejudicados pois a má estruturação pode causar grandes danos...
[14] Comentário enviado por adilsom em 19/05/2009 - 18:59h
ola, estou com um problema, tenho um sisetma que foi feito pra mysql4, e agora preciso fazer funcionar com mysql5.
So que em uma pagina da este erro
"
Database error: Invalid SQL: SELECT SUBSTR(t1.starttime,1,10) AS day, sum(t1.sessiontime) AS calltime, sum(t1.sessionbill) AS cost, count(*) as nbcall,sum(t1.buyratecost) FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROUP BY SUBSTR(t1.starttime,1,10) ORDER BY day
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROU' at line 1)
Database error: Invalid SQL: SELECT count(*) FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')' at line 1)
Database error: next_record called with no query pending.
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')' at line 1)
"
Detalhe, no phpmyadmin com mysql4 faço esta busca:
SELECT substr(t1.starttime,1,10) AS day, sum(t1.sessiontime) AS calltime, sum(t1.sessionbill) AS cost, count(*) as nbcall,sum(t1.buyratecost)FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROUP BY SUBSTR(t1.starttime,1,10) ORDER BY day
[16] Comentário enviado por henbran em 14/12/2009 - 14:48h
Boa tarde ...!!!!
GOSTARIA DE SABER SE ALGUÉM PODERIA ME ORIENTAR SOBRE O USO DO JOIN EM 1 CONSULTA SQL.
Tenho uma tabela de maquinas e outras de uso_maquinas. Preciso de uma consulta sql que busque na tabela maquina, todas as maquinas que não estão em uso. É 1 projeto de telecentro comunitário. Trabalho com PHP, MySql/postgre (uso recursos PDO).
Olhem por favor a string de consulta:
SELECT maquina.id_maquina, maquina.num_maq
FROM maquina
RIGHT JOIN
(usotelecentro RIGHT JOIN maquina ON maquina.id_maquina = usotelecentro.id_maquina)
ON usotelecentro.dt_utc >='2009-12-14'
WHERE maquina.id_tele_centro = 2
1º) campos a retornar os dados
2º) tabela de maquinas
3º) inicio da instrução JOIN
4º) primeira condição JOIN {se houver alguma máquina do telecentro em questão, em uso, ....}
5º) segunda condição JOIN {..., verificar se é da data atual}
6º) condição WHERE
Temos 2 tabelas, uma é a tabela fato (dados fixos) e a outra é a tabela tempo (dados inseridos conforme o uso). Usa-se o computador por 1 hora ou + e quando abre a tela para verificar quais computadores estão livres, referentes a esse telecentro, identificar se já/ou não está preenchido o campo hora_fim_de_uso.
É um projeto da prefeitura de Guarulhos - SP da qual sou programador PHP a 6 meses.
Obrigado