Php 使用循环仅显示一次每个不同的字段值
这个foreach()循环Php 使用循环仅显示一次每个不同的字段值,php,mysql,loops,for-loop,foreach,Php,Mysql,Loops,For Loop,Foreach,这个foreach()循环 SELECT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, 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 ORDER BY listDt DESC; $result=$sth->
SELECT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, 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
ORDER BY listDt DESC;
$result=$sth->fetchAll(PDO::FETCH_ASSOC);
foreach($结果为$行)
{
回声“;
打印“
标题:”.$row['listTitle']”。
注释:'.$row['listCmt']。
“
日期:”.$row['listDt']”。
报价人:“.$row['mBCFName']”。.$row['mBCLName']”。
报价人:“.$row['moAmt']”;
回声“;
}
产生:
基本上我想要的是:
$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>";
}
标题:苹果iPhone 4S(listTitle)
天:
报价人:某用户
报价:19.99
日期:2011年3月10日
报价人:某用户
报价:19.99
日期:2011年3月10日
报价人:某用户
报价:19.99
日期:2011年3月10日
基于每个字段都是相同的(listTitle、listLength、listCmt、listDt、mBCFName、mBCLName、moAmt、moDtOff),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”) 使用“Group by”SQL语句,然后定义规则(max、min、avg、Group_CONCAT…)来选择其他行-示例:
SELECT DISTINCT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, moDtOff
在我看来,您似乎想将
listTitle
打印为相关注释上方的组标题
一种方法是跟踪上一行的listTitle
,然后仅在与当前行有差异时打印。当然,您必须确保结果集是按listTitle
排序的
另一种方法是使用一个查询获取该组标题的所有数据,然后使用另一个查询获取该组的内容
也可能在查询中执行此操作,但这将是一个棘手的问题,因为您希望第一条记录中的
listTitle
具有listTitle
的值,而其他记录则具有null
——直到下一条listTitle
,这就不同了。@user975947:我现在没有时间尝试编写实际的工作代码解决方案。这些描述中有没有不清楚的地方?这是有道理的,但是这个小脚本如何遍历所有匹配的组合呢。例如,Title:Apple iPhone 4S
可能只有与该标题相关的某些注释。我想用两个脚本来做这件事。。一个是标题,另一个是其余部分。但是,如果它是两个独立的查询,我不知道如何将listTitle
与其他字段匹配。有道理吗?你能写出一些粗略的代码吗?我真的很感激
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;