php sql语法错误?

wwtsj6pe  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(133)

我有2个表(用户和朋友):

users   : user_sid  | user_status
friends : user_sid  | user2_sid | type

我想获得在线朋友列表,所以我使用以下语法:

SELECT user_sid 
FROM users 
WHERE users.user_status>0 
AND users.user_sid IN (
    (SELECT user_sid FROM friends WHERE user2_sid = '5604075088818445472' AND type=1) 
    UNION 
    (SELECT user2_sid FROM friends WHERE user_sid = '5604075088818445472' AND type=1)
) LIMIT 20 OFFSET 0

但我收到警告
SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,了解在第1行"UNION(SELECT user2_sid FROM friends WHERE user_sid ='56040750888184454 ...'"附近使用的正确语法
我所理解的是

((SELECT user_sid FROM friends WHERE user2_sid = '5604075088818445472' AND type=1))

返回空,并在mariadb中给出警告。
有人能帮忙吗?谢谢
我想得到的网上朋友名单没有警告,如果没有朋友。

rjjhvcjd

rjjhvcjd1#

语法错误不可能是由于子查询返回的内容造成的,因为语法是在执行任何操作之前检查的。
问题是括号太多了,它认为你在执行IN (list of values)而不是IN (subquery),所以去掉UNION中每个查询周围多余的括号。

SELECT user_sid 
FROM users 
WHERE users.user_status>0 
AND users.user_sid IN (
    SELECT user_sid FROM friends WHERE user2_sid = '5604075088818445472' AND type=1
    UNION 
    SELECT user2_sid FROM friends WHERE user_sid = '5604075088818445472' AND type=1
) 
LIMIT 20 OFFSET 0

相关问题