我有两个表是sql 1)friends_details和2)user_info。
现在使用以下查询使用$number = is coming from app
$sql = "select friends from user_info WHERE user_number ='$number' ";;
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
$emparray[] = $row;
}
现在$emparray
在String fromat中有朋友的名字。现在我想将此数组传递给另一个查询,以便我可以找到这些朋友的详细信息。并且找不到办法。我试过这段代码。
$friendsArray2 = "'" .implode("','", $emparray ) . "'";
$query120 = "SELECT * FROM friends_deataisl WHERE name IN ( $friendsArray2 )";
echo $query120;
并且echo $ query120的结果为SELECT * FROM friends_deatails WHERE name IN ( 'Array','Array' )
所以这意味着值不会出现在查询中。任何帮助,将不胜感激。 我已经检查过$ emparray不是空的它包含的名称意味着第一个查询是正确的,但问题出在第二个查询中。
答案 0 :(得分:1)
$emparray
是一个二维数组,而不是一个字符串数组,因为第一个循环中的$row
是一个关联数组。
您需要更改第一个循环:
$emparray[] = $row['friends'];
但您可以将两个查询合并为JOIN
:
SELECT DISTINCT fd.*
FROM friend_details AS fd
JOIN user_info AS ui ON fd.name = ui.friends
WHERE ui.user_number = '$number'
此外,列名friends
让我怀疑这是一个以逗号分隔的名称列表。使用=
或IN
将不起作用 - 它会尝试将整个列表与friend_details.name
匹配。最好规范化数据库,以便列中没有列表。如果您无法解决此问题,则需要使用FIND_IN_SET
加入表:
SELECT DISTINCT fd.*
FROM friend_details AS fd
JOIN user_info AS ui ON FIND_IN_SET(fd.name, ui.friends)
WHERE ui.user_number = '$number'
在原始代码中,您需要爆炸$row['friends']
:
$emparray = array_merge($emparray, explode(',', $row['friends']));