选择在一个查询中具有多个条件的位置

问题描述 投票:-1回答:1

我想要实现两件事。

这是我的数据库表“table”。

id | friend
---|--------
1  | null
2  | 1
3  | 0
4  | 3
5  | 3
6  | null

我想要做两个SELECT查询。

$id = 3;
SELECT * FROM table WHERE id = $id; // Not sql injection safe, just an example

这应该选择row id = 3.如果该行的friend列= 0,那么:

SELECT rows WHERE friend = $id.

如果该行的friend列不是0,那么只返回该行,第3行。但由于我上面的表显示行id 3的friend列= 0,所以这应该总共返回行:3,4,5。


另外,另一种情况有点不同:

$id = 5;
SELECT * FROM table WHERE id = $id;

如果该行的friend列<>(不等于)0 AND IS NOT NULL,则使用friend数字和:

SELECT * WHERE id = friend from previous table.

在这个例子中,它将返回第3,4,5行,因为ID = 5而friend ID为5所以我们搜索列idfriend为3并且我们选择它。

我想将所有这些组合在一起成为一个MySQL SELECT查询。我怎样才能做到这一点?

任何帮助将不胜感激!

mysql join select union where
1个回答
2
投票

在第一个场景中,我不明白为什么friend的零值返回3,4和5.为什么不是2?我假设如果friend值为零,则添加将您作为朋友的行。

所以,在第一个例子之前,我不能忍受一个名为“table”的表,所以我将使用friends作为表的名称。

SELECT FF.id
FROM friends FF
  INNER JOIN friends FID on FF.friend = FID.id
WHERE FID.friend = 0 AND FID = $id
UNION
SELECT F2.id FROM friends F2 WHERE F2.id = $id AND F2.friend IS NOT NULL

内部联接,获取朋友的id(FID.id)并再次加入friends表以获取所有记录作为朋友(FF.friend)值。

然后UNION将包括原始id。如果friend字段为NULL,则UNION的两侧都不会返回任何结果。

类似地,对于第二种情况,使用给定值($id = 5),找到该记录的friend值,并查询所有记录作为朋友,然后联合其记录。

SELECT FF.id
FROM friends FF
WHERE FF.friend = (SELECT FIN.friend FROM friends FIN where FIN.id = $id)
UNION
SELECT FIN.friend FROM friends FIN where FIN.id = $id
© www.soinside.com 2019 - 2024. All rights reserved.