2013-04-17 82 views
0

我想通過這些關節檢索這些表中的所有字段。
我的查詢運行在一個循環中,不停止。MySQL加入,查詢不結束(循環?)

SELECT * 
FROM (`t_produits`, `t_categories`, `t_sscategories`, `t_produits_couleurs`, `t_couleurs`) 
JOIN `t_categories` AS categories ON (`t_produits`.`produits_idcat` = `t_categories`.`categories_id`) 
JOIN `t_sscategories` AS sscategories ON (`t_produits`.`produits_idsscat` = `t_sscategories`.`sscategories_id`) 
JOIN `t_produits_couleurs` AS produitscouleurs ON (`t_produits`.`produits_idproduit` = `t_produits_couleurs`.`produits_couleurs_idproduit`) 
JOIN `t_couleurs` AS couleurs ON (`t_produits_couleurs`.`produits_couleurs_idcouleur` = `t_couleurs`.`couleurs_id`); 

我試過這個,效果不錯:

SELECT * 
FROM (`t_produits`, `t_categories`) 
JOIN `t_categories` AS categories ON (`t_produits`.`produits_idcat` = `t_categories`.`categories_id`) 
+2

通過在循環中運行你的意思是你在循環中執行查詢還是查詢沒有完成執行? – Ben

+1

有人可以在問題標題中編輯「聯合」嗎? :-) – Szocske

+0

在'SELECT'可以幫助時間之前添加'EXPLAIN' ... – glglgl

回答

1

在你的查詢您有4個直角連接(無需where子句的查詢將加入所有表中from條款)和許多加入一個給定的條件。難怪,查詢永遠不會結束..

有兩種可能性如何更改查詢:

使用WHERE條件

SELECT * 
FROM `t_produits` prod, `t_categories` cat, `t_sscategories` sscat, `t_produits_couleurs` prodcoul, `t_couleurs` coul) 
WHERE prod.`produits_idcat` = cat.`categories_id` 
    AND prod.`produits_idsscat` = cat.`sscategories_id` 
    AND prod.`produits_idproduit` = prodcoul.`produits_couleurs_idproduit` 
    AND prodcoul.`produits_couleurs_idcouleur` = coul.`couleurs_id`; 

或使用連接

SELECT * 
FROM `t_produits` prod 
JOIN `t_categories` cat ON prod.`produits_idcat` = cat.`categories_id` 
JOIN `t_sscategories` sscat ON prod.`produits_idsscat` = sscat.`sscategories_id` 
JOIN `t_produits_couleurs` prodcoul ON prod.`produits_idproduit` = procoul`.`produits_couleurs_idproduit` 
JOIN `t_couleurs` coul ON procoul.`produits_couleurs_idcouleur` = coul.`couleurs_id`; 

再說一句:如果不使用它們,則不需要定義別名

5
FROM (`t_produits`, `t_categories`, `t_sscategories`, `t_produits_couleurs`, `t_couleurs`) 

應該只是看起來像

FROM (`t_produits`) 

應該由一個很重要的因素加快了查詢。 ..

2

問題是,你混合tw一個查詢中的不同JOIN樣式。試試這個

SELECT * 
    FROM `t_produits` p 
    JOIN `t_categories` c ON p.`produits_idcat` = c.`categories_id` 
    JOIN `t_sscategories` s ON p.`produits_idsscat` = s.`sscategories_id` 
    JOIN `t_produits_couleurs` pc ON p.`produits_idproduit` = pc.`produits_couleurs_idproduit` 
    JOIN `t_couleurs` l ON p.`produits_couleurs_idcouleur` = l.`couleurs_id`; 

免責聲明:明明查詢尚未經過測試,