1

嗨,我正在创建一个带有查询的用户 ID 数组。对于另一个查询,我想从给定的表中进行选择,其中 user_id 是从我的第一个查询创建的数组中的一个。如何在 WHERE 子句中使用数组?

仅供参考:$row_interest 是数组

我的代码:

//Grabs the user id's of the users that have the queried interest
$interest_search_query= "SELECT DISTINCT user_id FROM interests WHERE interest LIKE   
'%".$search_term."%'";
$interest_search_result= mysqli_query($connect, $interest_search_query);
$row_interest= mysqli_fetch_array($interest_search_result);

//Grabs the user information with each user id
$search_query= "SELECT DISTINCT user_id, fname, lname, profile_pic, school FROM users   
WHERE user_id IN $row_interest";

我尝试了“WHERE user_id IN $row_interest”,但它似乎不起作用。我可能做错了什么?

谢谢。

4

4 回答 4

3
$search_query= "SELECT DISTINCT user_id, fname, lname, profile_pic, school FROM users   
WHERE user_id IN (".implode(',',$row_interest).")";
于 2013-05-29T22:47:59.477 回答
2

您实际上可以合并两个查询。

SELECT distinct user_id, fname, lname, profile_pic, school
FROM users
WHERE user_id in 
    (SELECT distinct user_id from interests
    where interest like %{search_term}%)
于 2013-05-29T22:50:44.120 回答
1

您可以在 PHP 中为您的 SQL 构建一个 IN() 子句,但由于该集合来自另一个查询,您可以使用 JOIN 来执行此操作。

编辑:如果没有您的数据,我无法对此进行测试,但连接将类似于

$search_query= "SELECT DISTINCT u.user_id, u.fname, u.lname, u.profile_pic, u.school 
FROM user u
INNER JOIN interests i ON u.user_id = i.user_id
WHERE i.interest like '%".$search_term."%'";
于 2013-05-29T22:49:32.523 回答
0

听起来您可以只使用连接,但$row_interest它是一个数组,并且它像"Array"在查询中一样被插值。看来您想先构建整个数组

$rows = array();
while ($row = mysqli_fetch_array($interest_search_result)) {
    $rows[] = $row['user_id'];
}

然后你可以创建你需要的“IN”子句。

"WHERE user ID IN (" . implode(",", $rows) . ")"

您的代码容易被注入。您应该使用准备好的语句正确参数化查询。据我了解,在 mysqli 中使用可变数量的参数更难做到这一点,但要记住这一点。

于 2013-05-29T22:49:04.137 回答