【问题标题】:MySQL select boolean based on whether record exists in another tableMySQL 根据记录是否存在于另一个表中选择布尔值
【发布时间】:2013-07-23 21:35:34
【问题描述】:

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

Entity:

id | ...

SavedEntity

id | entity_id | user_id

我希望结果是这样的:

entity_id | ... | favourite

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

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

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

注意我正在为我的查询使用 CodeIgniter 和活动记录的东西,但我可以解决 vanilla SQL。

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢 Raj,但这还不够,我知道条件值,但我的问题是首先选择要检查的“字段”。请看我的回答,我终于明白了。
      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多