这种情况涉及到3张表。 项目 视频 说明
每个项目都有一个列“entitytype”和一个句柄“entityid”,它是表格视频或表格说明中的行的相应 ID。不幸的是,这些表中的 id 名称分别是 urlid 和 textid。
我想选择一个项目,然后根据“entitytype”所包含的值将视频中的一行或说明中的一行中的数据加入到选择中
这段代码是伪代码,我是 MySQL 新手,正在尝试找到一种方法来表达我的意图
到目前为止,这是我的直觉:
SELECT items.*,
IF(entitytype='video', 'videos', 'instructions') as detail_table,
IF(entitytype='video', 'urlid', 'textid') as detail_id
FROM items
JOIN (detail_table) ON (items.entityid=detail_table.detail_id)
WHERE itemid=something
最佳答案
只需连接两个表,然后使用 IF 选择所需的值即可。
SELECT items.yourcolumns,
IF(items.entitytype='video', urlid, textid) as result_id
FROM items
LEFT OUTER JOIN videos ON items.entityid=videos.urlid
LEFT OUTER JOIN instructions ON items.entityid=instructions.textid
WHERE itemid=something
如果列的引用基于另一个列值指向另一个表,则您的关系模型就会被破坏。
更好:有两个额外的表:items_to_video
和 items_to_instructions
在需要的地方创建链接
编辑:躺在床上两分钟后,我不去想这件事,我想了想。当然。
SELECT items.yourcolumns,
urlid as result_id
FROM items
JOIN videos ON items.entityid=videos.urlid
WHERE itemid=something AND items.entitytype='video'
UNION ALL
SELECT items.yourcolumns,
textid as result_id
FROM items
JOIN instructions ON items.entityid=instructions.textid
WHERE itemid=something AND items.entitytype<>'video'
关于php - MySQL基于IF的Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7972713/