简体   繁体   English

查询3个表,在一个表中显示结果

[英]query 3 tables, show result in one table

I have the tables Tabela A , Tabela B , Tabela C . 我有桌子Tabela ATabela BTabela C I want the result on table Consulta : 我想要表Consulta上的结果:

Tabela A             Tabela B
---------------------------------
ID_A | Cidade       ID_B | Cidade
---------------------------------
1    |  Porto       1    | Preto
2    |  Braga       2    | Verde
3    |  Lisboa      3    | Amarelo
4    |  Coimbra     4    | Branco

Tabela C
-------------------
ID_C | ID_A | ID_B
-------------------
1    | 1    | 1
2    | 1    | 2
3    | 2    | 1
4    | 2    | 2
5    | 2    | 3
6    | 2    | 4
7    | 3    | 2
8    | 3    | 3
9    | 4    | 1
10   | 4    | 3
11   | 4    | 4

Tabela Consulta
-----------------------------------------------
ID_C | Cidade  | Cor
-----------------------------------------------
1    | Porto   | Preto; Verde;
2    | Braga   | Preto; Verde; Amarelo; Branco
3    | Lisboa  | Verde; Amarelo; 
4    | Coimbra | Preto; Amarelo; Branco;

I have the solution but is to slow because i have 15 000 records to show. 我有解决方案,但是要慢一些,因为我要显示15000条记录。 Can anyone hep me improve the time, or give me another solution. 任何人都可以帮助我改善时间,或者给我另一个解决方案。

<? php

$sql1 = "SELECT * FROM tabela_a order by id ASC";

$resultado = mysql_db_query($database, $sql1);

while ($registo = mysql_fetch_array($resultado)) {
    $id_a = $registo["id"];
    $cidade = $registo['cidade'];

    echo $id_a; ?> : <? php
    echo $cidade; ?> : <? php
    $sql2 = "SELECT id_b FROM tabela_c where id_a=$id_a";
    $resultado2 = mysql_db_query($database, $sql2);

    $quantreg = mysql_num_rows($resultado2);
    $i = 0;
    while ($i < $quantreg) {
        $registo2 = mysql_fetch_array($resultado2) or die(mysql_error());
        $id_b = $registo2["id_b"];

        $sql3 = "select * from tabela_b where id=$id_b";
        $resultado3 = mysql_db_query($database, $sql3);
        $registo3 = mysql_fetch_array($resultado3) or die(mysql_error());
        $cor = $registo3["cor"];
        echo $cor."; ";

        $i++;
    }
?>
    </br>
<?php
   }
?>

This is just join and group by . 这只是joingroup by You should do all the work in a single query: 您应该在单个查询中完成所有工作:

select a.id_a, a.Cidade, group_concat(b.cor separator '; ') as cor
from c join
     a
     on a.id_a = c.id_a join
     b
     on b.id_b = c.id_b
group by a.id_a, a.Cidade
order by a.id_a;

Note: I'm guessing the column in table b is really called cor and not cidade . 注意:我猜测表b的列实际上称为cor而不是cidade

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM