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