【问题标题】:How to check if value exists in one of the columns and in which one in MySQL?如何检查值是否存在于其中一列中以及 MySQL 中的哪一列中?
【发布时间】:2020-10-11 13:57:34
【问题描述】:

我正在尝试在 MySQL 中为我有 4 列的“友谊”表创建一个函数:

friendship_id、status、user1_id 和 user2_id(最后两个也是指向另一个表 'users' 的外键)。

函数应该接收一个参数,即用户ID,并返回该用户有多少朋友。

我创建了一个这样的函数:

CREATE FUNCTION num_of_friends(id int) 
RETURNS int(11)
BEGIN

SET @friends_count = (SELECT COUNT(user2_id) FROM friendships WHERE user1_id = id);
RETURN @friends_count;
END

因此,如果该特定用户的 id 在 user1_id 列中,则此函数会返回该特定用户的朋友数。

但是有些用户的 id 只在 user2_id 列中。

如何检查我们作为参数传递的用户 id 是否存在于任一列中并据此计算友谊?

【问题讨论】:

标签: mysql


【解决方案1】:

您可以将 id 值与OR 的两列进行比较

CREATE FUNCTION num_of_friends(id int) 
RETURNS int(11)
BEGIN

SET @friends_count = (SELECT COUNT(*) from (select * from friendship  where user1_id=id
                      union
                      select user2_id,user1_id from friendship where user2_id=id)data);
RETURN @friends_count;
END

检查这个 SQL 小提琴:http://sqlfiddle.com/#!9/c5928ca/8

【讨论】:

  • 感谢您的回复!我试过这个,但在这种情况下的问题是,如果我们有一个出现在 2 行中的相互友谊(2 行中的相同用户,但在第一个中 user1_id 将是例如 1,user2_id 将是 2,并且在另一个将是相反的方式)。在这种情况下,如果我将 1 作为参数而不是 1 个友谊传递,我将获得 2 个友谊。有什么办法可以排除这种“双重”友谊?
  • 嘿@alex:我已经更新了答案。检查一次,您还可以验证 SQL Fiddle 链接中的数据。
  • 非常感谢@Abhishek!联盟是我需要的:)
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 2019-02-22
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多