MySQL根据记录是否存在于另一个表中来选择布尔值

时间:2013-07-24 12:04:32

标签: mysql codeigniter subquery case full-outer-join

您好我有一个用户可以选择的实体表,我还有另一个表,其中包含有关用户最喜欢的实体的信息。参见:

Entity

id | ...

SavedEntity

id | entity_id | user_id

我希望结果如下:

entity_id | ... | favourite

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

我已经看过使用(或模仿!)一个FULL JOIN,但这似乎不必要地复杂,我无法让它工作,我已经查看了CASE关键字但是又一次我没有运气。

这种多对多的表结构是相当标准的我相信所以我确信有一种获取所需信息的标准方法,任何人都可以帮我弄清楚我缺少的东西吗?

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

2 个答案:

答案 0 :(得分:6)

我意识到我的实验并没有走得太远,这是一个最终的查询,它产生了我想要的结果。这是其他任何有类似问题的结果。

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 :(得分:2)

  

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

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