我试图将一个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字段的真实性!
我不确定我做错了什么导致这个。
有人可以就此问题提出建议吗?
任何帮助将不胜感激。
答案 0 :(得分:3)
撰写查询的正确方法是使用JOIN
,EXISTS
或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;
这取代了你的一大堆代码。
答案 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。