MySQL连接,查询未结束(循环?)

MySQL连接,查询未结束(循环?),mysql,loops,join,Mysql,Loops,Join,我想通过这些关节检索这些表中的所有字段。 我的查询在循环中运行,不会停止 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_ssc

我想通过这些关节检索这些表中的所有字段。
我的查询在循环中运行,不会停止

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`)
应该看起来像

FROM (`t_produits`)

它应该会大大加快查询速度…

问题是在一个查询中混合了两种不同的连接样式。试试这个

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`;

免责声明:查询显然没有经过测试

在您的查询中,您有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`;

还有一句话:你不需要定义别名,如果你不在循环中运行它们

,你的意思是你在循环中执行查询,还是查询没有完成执行?有人可以编辑问题标题中的“关节”吗?:-)在
选择之前添加
解释
,有时会有所帮助。。。
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`;