2015-10-04 84 views
1

我想把一個mysql選擇放在另一個裏面,並結合顯示的結果。PHP:MY​​SQL裏面選擇另一個MYSQL?

這是我的代碼:

$allattrs = ""; 
$sql69 = "SELECT * FROM product_details"; 
$query69 = mysqli_query($db_conx, $sql69); 
$login_check69 = mysqli_num_rows($query69); 
if($login_check69 > 0){ 
    while($row69 = mysqli_fetch_array($query69, MYSQLI_ASSOC)){ 


$FID = $row69["id"]; 

$sql2s = "SELECT * FROM ATTRIBUTES WHERE id='$FID'"; 
$query2s = mysqli_query($db_conx, $sql2s); 
$login_check2s = mysqli_num_rows($query2s); 
if($login_check2s > 0){ 
    while($row2s = mysqli_fetch_array($query2s, MYSQLI_ASSOC)){ 
     // Get member ID into a session variable 

      $Sid = $row2s["id"]; 
      $attr = $row2s["attr"]; 

      $allattrs .= ''.$attr.', '; 
    } 

} 



    $product_list .= '<tr> 
     <td>'.$allattrs.'</td> 
    </tr>'; 

    } 
} 

我遇到的問題是,$allattrs返回值,但它會把寄託都在一起。

例如:

如果在MySQL數據庫中的一個attr列有蘋果,另一個擁有橘子,當我看到我的PHP頁面上的$allattrs結果我看到這一點:

id 1 - apples 
id 2 - apples, oranges 
id 3 - apples, oranges, apples, oranges 

etc etc 

這實際上是錯誤的,因爲每個屬性值都需要保持對自己的id和product_details id字段的正確性!

我不知道我在做什麼錯誤導致此。

可能有人請告知這個問題?

任何幫助,將不勝感激。

+0

你可以請你分享一下你的表格結構,一些樣品數據以及你試圖達到的結果嗎? – Mureinik

回答

1

您需要將$allattrs設置爲空的字符串,內部爲您的第一個while循環,而不是隻有一次之前。

除此之外,您應該看看以下兩個主題:標準化和JOIN。

+0

歡呼你的答案做到了。 –

2

看起來,你是唯一的屬性感興趣,然後嘗試了這一點,而不是第一個SQL的:

SELECT * FROM ATTRIBUTES where id IN (SELECT id FROM product_details) 
3

寫你的查詢使用JOINEXISTS,或IN正確的方法。我想你會發現這是最自然的:

SELECT a.id, GROUP_CONCAT(a.attr) as attrs 
FROM ATTRIBUTES a 
WHERE a.id IN (SELECT id FROM product_details) 
GROUP BY a.id; 

這取代了你的一堆代碼。