php - MySQL基于IF的Join

标签 php mysql join if-statement conditional-statements

这种情况涉及到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_videoitems_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/

相关文章:

基于 ID 匹配从一个表到另一个表的 SQL 更新

r - 合并两个 data.frames 并替换

php - 我可以从类外部的特征中调用静态函数吗?

php - 限制 WordPress 用户每日门票配额

php - 在 PHP 中解析日期字符串

python - 400 错误请求 : KeyError:

php - 如何在拖放到 TinyMCE 时将 img 数据更改为 img url?

php - 按最新时间戳选择

mysql - Unicode MySQL 数据在 XML 中创建编码错误

mysql - 使用 Group_Concat 的多表连接,其中某些记录不存在于所有表中