首先抱歉长问题。
我的问题/情况是这样的。
1。)我在mysql中有2个表
2。)在第一个表中,每个列表都有一个唯一的ID(每个列表都在一行中)
3。)在第二个表中,它具有链接到列表ID的图像的名称/标签,来自第一个表
4.)每个列表可以有多个图像(第二个表中有多行)。
我要做的是从表1中提取所有列表,然后使用表1中的listing.id从表2中提取链接到listing.id的所有图像行。 我很困惑,因为有多个行具有来自表2的相同listing.id。我尝试查询显示*但它只回显表2中的最后一个图像(行)。
当我加入2个表时似乎没有用。而且我不确定我是否会查询两次然后将阵列推到一起。
感谢您的时间
$result=mysqli_query($con,"SELECT * FROM Listing JOIN listingpic ON
(Listing.id = listingpic.listingid)
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY GROUP BY Listing.id ORDER BY Listing.id DESC") or die( mysqli_error($con));
while ($row = mysqli_fetch_assoc($result))
{
$output[] = $row;
}
if (!empty($output)){
echo json_encode( $output );}
else{
echo json_encode( [] );
}
答案 0 :(得分:0)
每个ID只能获得一个结果,因为您使用了GROUP BY Listing.id
。如果不对它们进行分组,则每个表2行都会得到一个结果行,包括每次列表ID。
如果您希望在一个查询中检索一个查询中的数据,一个ID:多个数据",您可以使用GROUP_CONCAT作为示例,然后explode()
检索到的字符串结果
否则从表1中获取所有ID,然后在PHP中迭代它们,并为每个ID执行一次额外查询
答案 1 :(得分:0)
专业提示:请勿使用恶意混乱的MySQL扩展程序GROUP BY
。阅读:http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html
专业提示:请勿使用SELECT *
,尤其是在您加入桌子时。而是在结果集中枚举所需的列。
SQL的固有特性是结果集(如表)是矩形的。它们有行和列。每行通常代表一些真实世界项 - 一个“实体” - 每列代表该实体的某些属性。
您描述的结果集本来就会重复第一个表中的信息,以便它可以逐行显示第二个表中的信息。
我想,你想要查询的是这个。
SELECT Listing.id, listing.date,
listingpic.id, listingpic.url, listingpic.caption
FROM Listing
JOIN listingpic ON Listing.id = listingpic.listingid
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY
ORDER BY Listing.id DESC, listingpic.id
这将为每个图像提供一行。
如果你的内存不足,那是因为你的结果是庞大的。您可能希望以某种方式限制它,使用第一个和最后一个发布日期:
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())+293 DAY
或使用LIMIT条款。
ORDER BY Listing.id DESC, listingpic.id
LIMIT 100