MySQL查询WHERE语句哪个是查询本身?

时间:2011-02-09 06:05:13

标签: php mysql

所以我会首先尝试清楚地解释我的目标:

首先,我想查询数据库中的一个表以获取用户名列表。

其次,我想获取这些用户名,并查询数据库中的另一个表,并仅返回用户名字段中显示这些用户名的行。

最后,我想获取此输出(现在以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中编写该查询以便返回一个行数组?

3 个答案:

答案 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);