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

时间:2014-11-21 11:27:02

标签: mysql

我有表Tabela ATabela BTabela C。我希望结果放在表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;

我有解决方案但是要慢,因为我有15000条记录要显示。 任何人都可以帮我改善时间,或者给我另一种解决方案。

<? 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
   }
?>

1 个答案:

答案 0 :(得分:1)

这只是joingroup by。您应该在一个查询中完成所有工作:

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;

注意:我猜测表b中的列实际上称为cor,而不是cidade