2017-05-25 73 views
0

我有兩個表是sql 1)friends_details和2)user_info。 現在使用下面的查詢正在逐漸使用$number = is coming from app傳遞字符串數組在sql查詢使用PHP

$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具有的字符串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不是空它包含的名稱,這意味着第一次查詢是正確的,但問題是在第二次查詢。

+1

因爲mysqli_fetch_assoc回報陣列,你必須像'$ emparray [] = $ row ['friends'];''一樣填寫'emparray'。 – maximkou

回答

1

$emparray是一個2維數組,而不是一個字符串數組,因爲第一個循環中的$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'])); 
+0

感謝Barmar的工作。 –