1

我正在尝试在另一个查询中使用查询中的行。

此查询正确显示当前登录用户的用户名:

$param = $fgmembersite->UserEmail();

$query = mysqli_query($con, "SELECT username FROM Users1 WHERE email = '$param'
");

while ($row = mysqli_fetch_array($query)){
echo $row['username'] ;
    }

我正在尝试找到一种在另一个查询中使用 $row['username'] 的方法,例如...

$sql = mysqli_query($con, "SELECT * FROM messages WHERE to_user = '" . $row['username'] . "' ");

这不会给我一个编码错误,但它不起作用。用户名行显然不能像我尝试的那样从单独的查询中获取。

我尝试了所有我能想到的组合,但对我没有任何效果。非常感谢任何帮助。

4

4 回答 4

1

尝试子查询

SELECT * FROM messages WHERE to_user in (SELECT username FROM Users1 WHERE email = '$param')
于 2013-09-13T22:13:31.527 回答
1

您可以将查询合并为一个:

SELECT `messages`.*
FROM `messages`
    JOIN `Users1`
        ON `Users1`.`username`=`messages`.`to_user`
WHERE
    `Users1`.`email`='$param'
于 2013-09-13T22:14:54.820 回答
1

那么你应该把你的第二个查询放在里面:

while ($row = mysqli_fetch_array($query)){
  echo $row['username'] ;
  $sql = mysqli_query($con, "SELECT * FROM messages WHERE to_user = 
    '" . $row['username'] . "' ");
}

现在,当 mysqli_fetch_array 返回 NULL 并且您尝试将 NULL 插入第二个查询时,循环结束。

于 2013-09-13T22:16:51.233 回答
0

您可以将这两个查询合二为一。

SELECT * FROM messages WHERE to_user = (SELECT username FROM Users1 WHERE email = '$param')
于 2013-09-13T22:14:30.530 回答