0

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

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`)
4

3 回答 3

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

Should just look like

FROM (`t_produits`)

It should speed the query up by a quite big factor...

于 2013-04-17T09:59:49.440 回答
2

The problem is that you're mixing two different JOIN styles in one query. Try this

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

Disclaimer: the query obviously has not been tested

于 2013-04-17T10:00:12.423 回答
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`;

还有一点:如果不使用别名,则不需要定义别名

于 2013-04-17T10:11:52.890 回答