所以我会首先尝试清楚地解释我的目标:
首先,我想查询数据库中的一个表以获取用户名列表。
其次,我想获取这些用户名,并查询数据库中的另一个表,并仅返回用户名字段中显示这些用户名的行。
最后,我想获取此输出(现在以JSON数组形式),并将其返回给请求客户端。
我的查询现在看起来像这样:
$query = mysql_query("SELECT * FROM tagusers WHERE username =
(SELECT userA FROM friendtable WHERE userB = '$username')");
当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;
我在查询行上收到以下错误:
*警告:mysql_query()[function.mysql-query]:无法在第21行的C:\ wamp \ www \ tag \ appgetfriendinfo.php中保存结果集*
所以我真正需要知道的是,我如何在MySQL中编写该查询以便返回一个行数组?
答案 0 :(得分:5)
您根本不需要子查询,通常可以从连接中获得更好的性能。确保在tagusers.username,friendtable.userA和friendtable.userB
上定义了索引SELECT
tagusers.*
FROM
tagusers
INNER JOIN
friendtable
ON
tagusers.username = friendtable.userA
AND
friendtable.userB = '$username'
答案 1 :(得分:2)
使用IN
关键字。
$query = mysql_query("SELECT * FROM tagusers WHERE username IN
(SELECT userA FROM friendtable WHERE userB = '$username')");
答案 2 :(得分:1)
使用IN
子句或此示例中的JOIN:
$query = sprintf("SELECT tu.*
FROM TAGUSERS tu
JOIN FRIENDTABLE ft ON ft.usera = tu.username
WHERE ft.userB = '%s'",
mysql_real_escape_string($_POST['username']));
$result = mysql_query($query);
$output = json_encode($result);