1

我有一个名为lwim_projectsproject_id 列(以及其他)的表,一个lwim_designers使用列 designer_id (以及其他)调用的表和一个lwim_images使用列 image_id (以及其他)调用的表。

我还有 2 个连接表,称为lwim_join_designers_projectslwim_join_projects_images

有以下列lwim_join_designers_projects

  • dp_id,
  • 设计师 ID 和
  • 项目编号

有以下列lwim_join_projects_images

  • pi_id
  • project_id 和
  • image_id。

我想将连接表与前面提到的表连接起来,但不幸的是似乎无法同时连接它们,只能连接其中一个。

下面的代码对我来说是正确的(并且已经尝试了很多很多组合)。

$result = mysql_query("SELECT * FROM lwim_projects, lwim_designers, lwim_images
INNER JOIN lwim_join_designers_projects ON lwim_join_designers_projects.designer_id = lwim_designers.designer_id
INNER JOIN lwim_join_projects_images ON lwim_join_projects_images.image_id = lwim_images.image_id
WHERE lwim_projects.project_id = lwim_join_designers_projects.project_id
AND lwim_projects.project_id = lwim_join_projects_images.project_id
ORDER BY date_repinned DESC
LIMIT 20");

我也尝试过没有第二个 where 语句。

就像我说的那样,它无需从 lwim_images 表中选择并加入图像表即可工作,反之亦然,但似乎不想同时为两者工作。

任何人都可以阐明我可能出错的地方吗?

亲切的问候,丹尼尔

4

2 回答 2

2

您正在加入 5 张桌子。这通常意味着您需要 4 个 INNER JOINS,除非您以不寻常的方式加入。尝试在 FROM 子句中仅使用一个表,后跟四个 INNER JOIN 子句来重写您的查询。每个 INNER JOIN 都需要一个 ON 条件。

如果我正在调试它,我会在将查询嵌入代码之前尝试使用交互式 SQL 正确获取查询。

编辑以包括答案(未经测试):

$result = mysql_query("SELECT * 
FROM lwim_designers
INNER JOIN lwim_join_designers_projects ON
 lwim_join_designers_projects.designer_id = lwim_designers.designer_id
INNER JOIN lwim_projects ON 
  lwim_projects.project_id = lwim_join_designers_projects.project_id
INNER JOIN lwim_join_projects_images ON
  lwim_join_projects_images.project_id = lwim_projects.project_id
INNER JOIN lwim_images ON
  lwim_images.image_id = lwim_join_projects_images.image_id 
ORDER BY date_repinned DESC
LIMIT 20");

这些名字很难确保我没有打错字。

于 2013-07-09T13:06:45.840 回答
1

试试这个:

$result = mysql_query("SELECT * FROM lwim_projects, lwim_designers, lwim_images
INNER JOIN lwim_join_designers_projects ON lwim_join_designers_projects.designer_id = lwim_designers.designer_id AND lwim_join_designers_projects.project_id = lwim_projects.project_id
INNER JOIN lwim_join_projects_images ON lwim_join_projects_images.image_id = lwim_images.image_id AND lwim_join_projects_images.project_id = lwim_projects.project_id
ORDER BY date_repinned DESC
LIMIT 20");

我已将 where 子句放在INNER JOIN ON语句中,这可能会有所帮助...

于 2013-07-09T12:55:21.833 回答