Php 使用循环仅显示一次每个不同的字段值

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']

这个foreach循环

产生:

基本上我想要的是:

    $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;