Php 使用循环仅显示一次每个不同的字段值
这个foreach循环 产生: 基本上我想要的是:Php 使用循环仅显示一次每个不同的字段值,php,mysql,loops,for-loop,foreach,Php,Mysql,Loops,For Loop,Foreach,这个foreach循环 产生: 基本上我想要的是: $result = $sth->fetchAll(PDO::FETCH_ASSOC); foreach($result as $row) { echo "<div class='listing'>"; print '<br>Title: ' . $row['listTitle'] . '<br>Comment: ' . $row['listCmt']
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row)
{
echo "<div class='listing'>";
print '<br>Title: ' . $row['listTitle'] . '<br>Comment: ' . $row['listCmt'] .
'<br>Date: ' . $row['listDt'] . '<br>Offer By: ' . $row['mBCFName']. ' ' .$row['mBCLName']. '<br> for: ' . $row['moAmt'];
echo "</div>";
}
基于每个字段都是相同的listTitle、listLength、listCmt、listDt、mBCFName、mBCLName、moAmt、ModTof,在SQL中更改最简单
Title: Apple iPhone 4S (listTitle)
Days: <some day amount <listLength>
Comment: some comment <listCmt>
Offer By: some user <mBCFName mBCLName>
Offer: 19.99 <moAmt>
Date: 10/03/2011 < moDtOff>
Offer By: some user <mBCFName mBCLName>
Offer: 19.99 <moAmt>
Date: 10/03/2011 < moDtOff>
Offer By: some user <mBCFName mBCLName>
Offer: 19.99 <moAmt>
Date: 10/03/2011 < moDtOff>
Offer By: some user <mBCFName mBCLName>
Offer: 19.99 <moAmt>
Date: 10/03/2011 < moDtOff>
如果不一样,那么代码将如何决定显示哪个New Balance 574男鞋?这并不是那么容易-问题是要为其他字段显示什么,例如mBCFName字段-Amanda或John 使用GROUPBYSQL语句,然后定义规则max、min、avg、Group\U CONCAT。。。要选择其他行-示例:
SELECT DISTINCT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, moDtOff
在我看来,您似乎希望将listTitle打印为相关注释上方的组标题 一种方法是跟踪前一行的listTitle,然后仅在与当前行有差异时打印它。当然,您必须确保结果集是按listTitle排序的 另一种方法是使用一个查询获取该组标题的所有数据,然后使用另一个查询获取该组的内容
在查询中也可能这样做,但这将很棘手,因为您希望具有该listTitle的第一条记录具有listTitle的值,而其他记录具有null值,直到下一个不同的listTitle。@user975947:我现在没有时间尝试编写实际的工作代码解决方案。这些描述中有没有不清楚的地方?这是有道理的,但是这个小脚本如何遍历所有匹配的组合呢。例如,标题:苹果iPhone4S可能只有某些与该标题相关的评论。我想用两个脚本来做这件事。。一个是标题,另一个是其余部分。但是,我不知道如果listTitle是两个独立的查询,它们将如何与其他字段匹配。有道理吗?你能写出一些粗略的代码吗?我真的很感激
SELECT DISTINCT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, moDtOff
SELECT listTitle, min(listLength), min(listCmt), min(listDt), GROUP_CONCAT(mBCFName), min(mBCLName), min(moAmt), min(moDtOff)
FROM User U, Listing L, Merchant M, MerchantOffer MO
WHERE U.uID = L.uID
and L.listID = MO.listID
and M.mID = MO.mId
GROUP BY listTitle
ORDER BY listDt DESC;