Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

26-02-2012 11:17

Esse script que indico aqui é uma referência ao link http://cobaia.net/2010/08/mysql-multipl ... ll-result/

Esse script permite fazer duas ou mais consultas ( múltiplas consultas ao banco de dados ) em uma única query. Ou seja, você pode retornar alguns resultados de uma consulta e alguns de outra, na mesma query.

Exemplo:

(SELECT * FROM tabela WHERE sexo = 'masculino' LIMIT 3) UNION (SELECT * FROM tabela WHERE sexo = 'feminino' LIMIT 3)

Nessa query, eu listo 3 resultados da tabela onde sexo for igual a masculino, e 3 onde o sexo for igual a feminino.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 12:42

Qual seria a sintaxe correta dessa consulta?

Encontrei exemplo sem parêntesis, mas não sei se é apenas uma citação:

SELECT ShipName, ShipAddress FROM Orders WHERE CustomerID ="WARTH" UNION SELECT ShipName, ShipAddress FROM Orders WHERE CustomerID ="VINET"

O exemplo deste post possui parêntesis.

Estou tentando fazer assim:

$q1 = "SELECT ta1 from $tab WHERE ta1 = '6' UNION SELECT ta1 from $tab WHERE ta1 = '9' UNION SELECT ta1 from $tab WHERE ta1 = '10'" OR die( mysql_error() );

E está dando o erro: Something is wrong in your syntax près de 'UNION SELECT ta1 from aba WHERE ta1 ='9' UNION SELECT ta1 from a' à la ligne 1.
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 14:09

O correto, já com o while é o seguinte

$query=mysql_query("(SELECT * FROM tabela WHERE sexo = 'masculino' LIMIT 3) UNION (SELECT * FROM tabela WHERE sexo = 'feminino' LIMIT 3)"); while($dados=mysql_fetch_array($query)) { extract($dados); echo "$colunatal"; } 

É só você adaptar sua query nesse exemplo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 15:57

Estou tentando adaptar o exemplo. Para não fugir do mesmo, alterei apenas o nome da coluna, tirei o LIMIT, e troquei $dados por $a1, pois meu código já está com a mesma. Ficou assim:

$query=mysql_query("(SELECT * FROM $tab WHERE ta1 = '6') UNION (SELECT * FROM $tab WHERE ta1 = '9')"); while($a1=mysql_fetch_array($query)) { (...) 

Mas está acusando o seguinte erro na linha do while: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in (...).

E uma pergunta: eu posso acrescer mais um UNION?
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 16:29

O erro pode ser duas coisas: o $tab que a query não acha o valor, ou esse (...), não sei se você escreveu isso no código.

Testei aqui com 3 UNIONS e funcionou.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 17:24

Mudei a variável que contém a tabela para o nome da tabela, e o problema persistiu. Este (...) usei somente no post para indicar que havia mais código.

Qual a diferença da sua consulta, referente ao while, para a consulta abaixo?

$cod = "SELECT * FROM $tav where ta1 = '".$ta1."' and ca1 = '".$ca1."' and sto = '".$sto."' LIMIT $ini, $lre"; $rcd = mysql_query($cod); while($dad = mysql_fetch_array($rcd)) { 

Eu quero dizer que na sua consulta mysql_query está na linha do select; e no código acima, está noutra linha. Qual a diferença das situações?
1
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 17:49

A minha e a sua são basicamente a mesma coisa. A criar $query e já executa, para ser usado no while. A sua, primeiro você escreve sua query, depois cria a variável com a execução, depois usa no while.

Esse erro "Warning: mysql_fetch_array()" geralmente é que algum valor usado na query não existe nas tabelas. Tenta digitar todos os valores ao invés de pegar de outro lugar.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 20:42

A consulta abaixo é de um outro post em que você me ajudou:

$query = "select * from $tab where ta1 = '6' || ta1 = '9' || ta1 = '10' order by RAND()" or die( mysql_error() ); 

Ela usa a mesma tabela e a mesma coluna deste post, e não ocorrem os problemas da consulta de seu exemplo que estou testando.

No Manual de Referência do MYSQL há a citação de uma consulta bem parecida com a que eu quero fazer. Nela é dito "Se você quiser usar um ORDER BY para o resultado UNION final, você deve utilizar parenteses". No caso do seu exemplo, não há um ORDER BY para o resultado UNION final. A observação está neste link: http://dev.mysql.com/doc/refman/4.1/pt/union.html. A consulta citada é esta, mas está incompleta:

(SELECT a FROM nome_tabela WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM nome_tabela WHERE a=11 AND B=2 ORDER BY a LIMIT 10) ORDER BY a;

0
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 20:50

Desculpe. Eu gostaria de fazer uma observação. Encontrei vários exemplos da utilização do operador UNION fazendo consulta de colunas iguais mas de tabelas diferentes. Eu estou tentando consultar colunas iguais com registros diferentes mas na mesma tabela. Será que esse poderia ser o problema, não se fazer a consulta para uma mesma tabela?
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 20:55

1º RESPOSTA

Não sabia sobre esse uso de aspas, só sigo a seguinte regra

$query=mysql_query("(SEL...

Abro com aspas duplas e dentro da query uso aspas simples, e funciona sem problema.

Não sei de nada relacionado a ORDER BY e pasenteses, sei que seguindo a regra não há problema.

SELECT colunas FROM suatabela WHERE.... ORDER BY .... LIMIT ...

2º RESPOSTA

Não vejo nenhum problema em sua consulta

Eu tenho aqui localmente duas tabelas, estados e cidades, e fiz a seguinte consulta:

$query=mysql_query("(SELECT * FROM estados WHERE nome='Acre' || nome='Bahia' LIMIT 3) UNION (SELECT * FROM cidades LIMIT 5)");

Obtive os resultados sem problema, como mostrado abaixo

Acre
Bahia
Acrelândia
Assis Brasil
Brasiléia
Bujari
Capixaba
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 21:09

Aí é que deve estar o problema na utilização do UNION para o que eu pretendo: estou tentando utilizar o UNION para a mesma tabela. Tenho encontrado muitas referências no sentido de que ele é usado para unir tabelas diferentes. No seu exemplo da 2.ª resposta há uma tabela estados e cidades.
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 21:11

Sim, isso mesmo. Para a mesma tabela, parece que o script ignora a primeira consulta e usa somente a última do UNION.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 21:13

Acabei lembrando do UNION ALL. Testei aqui e rodou as duas consultas na mesma tabela.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Mensagens: 1309
Sexo: Masculino

Duas consultas na mesma query de forma independente

27-02-2012 23:01

Eu vi o UNION ALL, mas não testei com ele. O mesmo exemplo que você colocou com UNION posso testá-lo com UNION ALL, acrescentando apenas o ALL?
0
 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17735
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Duas consultas na mesma query de forma independente

27-02-2012 23:02

Sim, testei aqui e funcionou.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Bing [Bot]