2014-11-21 162 views
0

我有表格Tabela A,Tabela B,Tabela C。我想在表Consulta結果:查詢3個表格,在一個表格中顯示結果

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; 

我有解決方案,但要慢,因爲我有15條000記錄顯示。 任何人都可以幫我改善時間,或給我另一種解決方案。

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

嘗試通過使用'limit'來使用分頁。 ref:http://razorsql.com/articles/mysql_limit_query.html – 2014-11-21 11:43:36

回答

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

+0

非常感謝Gordon。 是的,表B的列是cor而不是cidade。 – 2014-11-21 16:37:59

+0

@RicardoMota。 。 。我的葡萄牙語非常非常糟糕,但那些看起來並不像城市名稱。 ;) – 2014-11-21 17:18:33