Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SQL查询正确语法_Php_Mysql_Sql_Syntax - Fatal编程技术网

PHP SQL查询正确语法

PHP SQL查询正确语法,php,mysql,sql,syntax,Php,Mysql,Sql,Syntax,我有一个名为friends的数据库表,有3列:added\u by,added\u who和added\u time 在PHP脚本中,我尝试使用如下查询返回特定用户的朋友: SELECT * FROM friends WHERE added_by = '$specific_user_id' OR added_who = '$specific_user_id'; 如何获取好友的用户id,因为它可能位于added\u by或added\u who列中,具体取决于谁先添加了谁。我知道怎么做,比

我有一个名为
friends
的数据库表,有3列:
added\u by
added\u who
added\u time

在PHP脚本中,我尝试使用如下查询返回特定用户的朋友:

SELECT * 
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id';

如何获取好友的用户id,因为它可能位于
added\u by
added\u who
列中,具体取决于谁先添加了谁。我知道怎么做,比如检查
added\u who==$specific\u user\u id
,如果是真的,那么朋友的id在
added\u by
列中,反之亦然,但我想知道是否有更快更好的方法

您可以使用一个简单的
IF
语句来进行此操作

SELECT *, IF(added_by = '$specific_user_id', added_who, added_by) AS friend_id
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id';
使用案例陈述。有关更多信息,请参阅的MySQL文档

应用该方法的一个例子是:

SELECT CASE added_by WHEN '$specific_user_id' THEN added_who ELSE added_by END as friend_id  
FROM friends 
WHERE added_by = '$specific_user_id' 
    OR added_who = '$specific_user_id';

尝试此查询,它是要进行的两个查询之间的简单联合

 SELECT added_who FROM friends 
 WHERE added_by = '$specific_user_id' 
 UNION 
 SELECT added_by FROM friends
 WHERE added_who = '$specific_user_id'

是由
和类似的行或列添加的吗?也许这并不重要,但您使用的是哪个SQL数据库引擎?MS SQL Server、MySQL、postgreSQL等?如果这个问题与PHP有关,我的建议是插入占位符并将数据作为数组传递:
。。。其中以=?或者添加了_who=?
。我正在使用MySQL