6

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

Entity

id | ...

SavedEntity

id | entity_id | user_id

我希望结果如下:

entity_id | ... | favourite

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

我已经研究过使用(或模拟!)a FULL JOIN,但这似乎不必要地复杂,我无法让它工作,我看过CASE关键字,但我还是没有运气。

我相信这种多对多表结构是相当标准的,所以我确信有一种获取所需信息的标准方法,谁能帮我弄清楚我错过了什么?

注意我正在使用 CodeIgniter 和活动记录来进行查询,但我可以解决普通 SQL。

4

2 回答 2

8

我意识到我的实验做得还不够,这是一个最终的查询,它产生了我想要的结果。这是其他有类似问题的人的结果。

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
于 2013-07-24T12:45:10.047 回答
2

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

  SELECT
  .....
  IF( `field` = 'value', 'True', 'False' ) AS "favourite"
  .....
  JOIN
  ....
于 2013-07-24T12:47:50.457 回答