您好我正在创建一个带有查询的用户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",但它似乎没有用。我能做错什么?
感谢。
答案 0 :(得分:3)
$search_query= "SELECT DISTINCT user_id, fname, lname, profile_pic, school FROM users
WHERE user_id IN (".implode(',',$row_interest).")";
答案 1 :(得分: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}%)
答案 2 :(得分: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."%'";
答案 3 :(得分: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中的可变数量的参数更难以做到这一点,但需要记住这一点。