Definir critério em uma busca entre duas tabelas.

06/08/2019

0

Olá a todos!
Sempre consultei o devmedia para tirar algumas dúvidas, no entanto me deparei com uma situação que não consigo sanar, deve ser uma bobagem para quem sabe, mas, para iniciante como eu, deve ser um big problema.

Dúvida...
1 - Tenho duas tabelas (tbl_teste) onde inserir o resultado de uma query.
$busca = mysqli_query ($mysqli,"SELECT account_id, SUM(point) AS total FROM tbl_medals GROUP BY account_id ORDER BY total");
//$row2 = mysqli_fetch_array($busca);
while($line = mysqli_fetch_array($busca))
{
$account_id = $line["account_id"];
$total = $line["total"];
$inserir = mysqli_query ($mysqli,"INSERT INTO tbl_teste (account_id,point) VALUES (''''$account_id'''',''''$total'''')");
}
Como podem ver, essa query inseri na tabela teste o resultado de uma consulta, até ai tudo bem...

2 - A tabela teste ficou da seguinte forma ao realizar uma consulta.

select * from tbl_teste;
+-----+------------+-------+
| id | account_id | point |
+-----+------------+-------+
| 241 | 33 | 8 |
| 242 | 1 | 12 |
| 243 | 2 | 302 |
+-----+------------+-------+

3 - Agora que está o problema. A tabela tbl_ranking tem os nomes respectivos de cada account_id, fiz essa consulta.
SELECT tbl_teste.account_id, tbl_teste.point,tbl_ranking.given_name,tbl_ranking.level,tbl_ranking.class_id FROM tbl_teste, tbl_ranking WHERE tbl_ranking.account_id = tbl_teste.account_id AND tbl_ranking.exp >=0 GROUP BY tbl_teste.account_id ORDER BY tbl_teste.point DESC, tbl_ranking.exp ASC

+------------+-------+------------+-------+----------+
| account_id | point | given_name | level | class_id |
+------------+-------+------------+-------+----------+
| 2 | 302 | ThePistol | 90 | 16 |
| 1 | 12 | Rgz | 90 | 4 |
| 33 | 8 | Test10 | 1 | 512 |
+------------+-------+------------+-------+----------+

mas... Ela resulta a primeira ocorrência do account_id 2, quando na realidade eu queria determinar qual seria o critério que definiria a exibição do nome da tabela...
na tabela tbl_ranking tem vários account_id 2, e tem um campo chamado pontos, eu queria que a consulta pegasse e exibisse o nome da account_id 2 com o maior numero de pontos.

Não sei se fui claro em minha dúvida e desde já peço desculpa, pois esse é meu primeiro post aqui.
Abraço.
Wallace Silva

Wallace Silva

Responder

Posts

06/08/2019

William Silva

Olá a todos!
Sempre consultei o devmedia para tirar algumas dúvidas, no entanto me deparei com uma situação que não consigo sanar, deve ser uma bobagem para quem sabe, mas, para iniciante como eu, deve ser um big problema.

Dúvida...
1 - Tenho duas tabelas (tbl_teste) onde inserir o resultado de uma query.
$busca = mysqli_query ($mysqli,"SELECT account_id, SUM(point) AS total FROM tbl_medals GROUP BY account_id ORDER BY total");
//$row2 = mysqli_fetch_array($busca);
while($line = mysqli_fetch_array($busca))
{
$account_id = $line["account_id"];
$total = $line["total"];
$inserir = mysqli_query ($mysqli,"INSERT INTO tbl_teste (account_id,point) VALUES (''''$account_id'''',''''$total'''')");
}
Como podem ver, essa query inseri na tabela teste o resultado de uma consulta, até ai tudo bem...

2 - A tabela teste ficou da seguinte forma ao realizar uma consulta.

select * from tbl_teste;
+-----+------------+-------+
| id | account_id | point |
+-----+------------+-------+
| 241 | 33 | 8 |
| 242 | 1 | 12 |
| 243 | 2 | 302 |
+-----+------------+-------+

3 - Agora que está o problema. A tabela tbl_ranking tem os nomes respectivos de cada account_id, fiz essa consulta.
SELECT tbl_teste.account_id, tbl_teste.point,tbl_ranking.given_name,tbl_ranking.level,tbl_ranking.class_id FROM tbl_teste, tbl_ranking WHERE tbl_ranking.account_id = tbl_teste.account_id AND tbl_ranking.exp >=0 GROUP BY tbl_teste.account_id ORDER BY tbl_teste.point DESC, tbl_ranking.exp ASC

+------------+-------+------------+-------+----------+
| account_id | point | given_name | level | class_id |
+------------+-------+------------+-------+----------+
| 2 | 302 | ThePistol | 90 | 16 |
| 1 | 12 | Rgz | 90 | 4 |
| 33 | 8 | Test10 | 1 | 512 |
+------------+-------+------------+-------+----------+

mas... Ela resulta a primeira ocorrência do account_id 2, quando na realidade eu queria determinar qual seria o critério que definiria a exibição do nome da tabela...
na tabela tbl_ranking tem vários account_id 2, e tem um campo chamado pontos, eu queria que a consulta pegasse e exibisse o nome da account_id 2 com o maior numero de pontos.

Não sei se fui claro em minha dúvida e desde já peço desculpa, pois esse é meu primeiro post aqui.
Abraço.


na tabela tbl_ranking tem vários account_id 2
=> Boa noite Wallace, acredito que o problema esteja aqui, se entendi bem, você deu o id 2 para mais de um atributo, para fazer um select no banco, você precisa referenciar uma "chave identificadora" que deveria existir apenas uma para cada atributo da tabela.
ORDER BY tbl_teste.point DESC, tbl_ranking.exp ASC
=> e neste caso, você teria que fazer um único order by para a nova tabela criada com o SELECT.

Eu não sei muita coisa tbm, mas você já fez o mais importante, que é encontrar a dúvida e procurar ajuda. espero que resolva seu problema, desculpe não poder resolve-lo agora, mas acredito que logo menos alguém irá te ajduar... tenha uma ótima noite, abraços.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar