2013-07-24 44 views
4

嗨我有一个用户可以选择的实体表,我还有另一个表,其中包含有关用户最喜欢的实体的信息。请参阅:MySQL根据是否存在另一个表中的记录选择布尔值

Entity

id | ... 

SavedEntity

id | entity_id | user_id 

我想要的结果是这样的:

entity_id | ... | favourite 

我的问题是如何更改我的查询获取所有实体并添加一个附加字段是boolean实体是否是用户的最爱值?

我看过使用(或模拟!)FULL JOIN,但这似乎不必要的复杂,我不能完全得到它的工作,我已经看过CASE关键字,但我再也没有运气。

这个多对多的表结构相当标准我相信所以我确定有一个标准的方式来获取所需的信息,任何人都可以帮助我找出我失踪的东西吗?

N.B.我为我的查询使用CodeIgniter和活动记录的东西,但我可以解决vanilla SQL。

回答

5

我意识到我没有做足够多的实验,这是一个最终查询,它产生了我想要的结果。对于有类似问题的其他人来说,结果如下。

SELECT Entity.*, 
      CASE WHEN UsersSavedEntity.user_id = '$user_id' 
       THEN 1 
       ELSE 0 
      END AS favourite 
FROM Entity 
LEFT JOIN (SELECT * 
      FROM SavedEntity WHERE SavedEntity.user_id = '$user_id') 
      AS UsersSavedEntity 
      ON Entity.id = UsersSavedEntity.entity_id 
1

我的问题是如何更改我的查询它可以获取所有实体 和添加其他字段是实体 是否是用户最喜欢的一个布尔值?

SELECT 
    ..... 
    IF(`field` = 'value', 'True', 'False') AS "favourite" 
    ..... 
    JOIN 
    .... 
+0

感谢拉吉,但这还远远不够,我是知道的条件值,但我的问题是选择“场”在第一时间进行检查。请看我的回答,我终于明白了。 – Josh

相关问题