我有一个名为 lwim_projects
的表,其中包含 project_id 列(除其他外),一个名为 lwim_designers
的表,包含列 designer_id (除其他外)和一个名为 lwim_images
带有 image_id 列(以及其他列)。
我还有 2 个连接表,名为 lwim_join_designers_projects
和 lwim_join_projects_images
。
lwim_join_designers_projects
包含以下列:
- dp_id,
- designer_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 表中选择并加入图像表即可工作,反之亦然,但似乎不想同时为两者工作。
任何人都可以阐明我可能出错的地方吗?
亲切的问候, 丹尼尔
最佳答案
您正在加入 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");
这些名称很难确保我没有打错字。
关于php - 如何从 3 个表中选择,同时加入另外 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548506/