因此,我将首先尝试清楚地解释我的目标:
首先,我想查询数据库中的一个表以获取用户名列表.
其次,我想获取这些用户名,并查询数据库中的另一个表,并仅返回这些用户名出现在用户名字段中的行.
最后,我想获取此输出(现在以JSON数组形式),并将其返回给请求客户端.
我的查询现在看起来像这样:
$query = mysql_query("SELECT * FROM tagusers WHERE username =
(SELECT userA FROM friendtable WHERE userB = '$username')");
Run Code Online (Sandbox Code Playgroud)
当WHERE语句产生1个结果时,这个工作原理.因此,如果我只获得一个返回的userA,它可以正常工作.但如果我得到多个,我会收到一堆错误.
以下是完整的代码:
if (isset($_POST['username'])) {
$username = $_POST['username'];
$connect = mysql_connect("localhost", "root", "");
mysql_select_db("TagDB");
$query = mysql_query("SELECT * FROM tagusers WHERE username =
(SELECT userA FROM friendtable WHERE userB = '$username')");
}
while ($e = mysql_fetch_assoc($query)) {
$output[] = $e;
}
$output = json_encode($output);
print $output;
Run Code Online (Sandbox Code Playgroud)
我在查询行上收到以下错误:
*警告:mysql_query()[function.mysql-query]:无法在第21行的C:\ wamp\www\tag\appgetfriendinfo.php中保存结果集*
所以我真正需要知道的是,我如何在MySQL中编写该查询以便返回一个行数组?
您根本不需要子查询,通常可以从连接中获得更好的性能.确保在tagusers.username,friendtable.userA和friendtable.userB上定义了索引
SELECT
tagusers.*
FROM
tagusers
INNER JOIN
friendtable
ON
tagusers.username = friendtable.userA
AND
friendtable.userB = '$username'
Run Code Online (Sandbox Code Playgroud)