【问题标题】:Mysql add temporary column if data not found如果找不到数据,Mysql会添加临时列
【发布时间】:2021-05-18 04:33:52
【问题描述】:

我在mysql数据库中有这两个表,可以这样查询,如果在like_tbl中没有为列islike找到数据,自动创建一个值为false的临时列。

like_tbl 中好像没有 post_id = 3 的数据,所以结果应该是我下面提到的这样。

post_tbl

post_id uid fname
1 1 abc
2 1 abc
3 1 abc

like_tbl

likeid uid postid islike
1 2 1 true
2 3 2 true

这是我正在寻找的结果:

post_id uid fname islike
1 2 abc false
2 2 abc true
3 2 abc false

总结我正在尝试进行查询,该查询将返回所有 post_id 并检查like_tbl 特定用户是否喜欢该帖子。如果 like_tbl 中的 uid 的特定 post_id 的数据存在,它将返回 islike 列值 true 否则如果没有找到特定 uid 的 post_id 的数据,它将返回 false。

我试过这个但没有帮助,

select n.* , e.isLike 
from post_tbl n 
join like_tbl on e.post_id = n.post_id 
where n.uid = '2' 
order by post_id desc

mysql 数据库新手,如有任何帮助,将不胜感激

【问题讨论】:

  • LEFT JOINCOALESCE(islike, 'false')
  • 我已经尝试过了,但它没有重新调整 post_tbl 中的所有数据,它只返回 like_tbl 中的数据
  • 它不会重新调整 post_tbl 中的所有数据,它只返回 like_tbl 中的数据 如上所述将 JOIN 替换为 LEFT JOIN。
  • 编辑样本数据,将1 更改为11111 等等 - 即去除多余值的干扰。与'abc' 相同。
  • 但我需要来自 post_tbl 的所有数据,如果特定用户的数据不存在,我想显示 false,现在它工作良好但只有一件事我想要所有数据来自 post_tbl。正如我上面在结果中提到的,我想要表格

标签: mysql database join subquery


【解决方案1】:

你可以尝试使用 ifnull 和 left join

select n.* , ifnull(e.isLike , 'false')
from post_tbl n 
LEFT JOIN like_tbl e on e.postid = n.post_id 
    AND e.uid = n.uid

order by post_id DESC

【讨论】:

  • 我已经尝试过了,但它没有返回 post_tbl 中的所有行,我需要 post_tbl 中的所有行
  • 不工作,现在它从 post_tbl 获取所有数据,这很好,但不适用于特定用户。我需要一个查询,它将返回所有 post_id 并检查 like_tbl 特定用户是否喜欢该帖子。如果like_tbl中uid的特定post_id的数据存在,它将返回islike列值true,否则如果在like_tbl中找不到特定uid的post_id的数据,它将返回false
  • 错过了用户的条件......添加..答案更新
  • 将给所有false。似乎post_tbl.uid 是帖子作者,而like_tbl.uid 是帖子读者/喜欢者。所以他们必须是不同的(如果不允许自我喜欢)。
  • 事实上,你在 post_tbl 和 pos_like t 表中都有 uid 1,但你没有 uid1
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2010-11-01
  • 1970-01-01
相关资源
最近更新 更多