PHP:MY​​SQL里面选择另一个MYSQL选择?

时间:2015-10-04 16:07:39

标签: php mysql

我试图将一个mysql选择放在另一个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字段的真实性!

我不确定我做错了什么导致这个。

有人可以就此问题提出建议吗?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

撰写查询的正确方法是使用JOINEXISTSIN。我想你会发现这最自然:

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;

这取代了你的一大堆代码。

答案 1 :(得分:2)

看起来你只对属性感兴趣然后尝试这个而不是第一个sql:

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

答案 2 :(得分:1)

您需要将 <glimpse serviceLocatorType="Glimpse.Test.Core.TestDoubles.DummyServiceLocator, Glimpse.Test.Core" ...> 设置为第一个while循环内的空字符串,而不是之前的一次。

除此之外,您应该查看以下两个主题:规范化和JOIN。