2015-10-04 43 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; 

这取代了你的一堆代码。