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;
Этот цикл 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>"; }
производит:
В основном я хочу:
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>
Мне кажется, что вы хотите напечатать listTitle
как группу, возглавляющую над соответствующими комментариями.
Один из способов сделать это – отслеживать listTitle
предыдущей строки, а затем печатать только в том случае, если есть разница с текущей строкой. Конечно, вам нужно будет убедиться, что ваш результирующий набор упорядочен по listTitle
.
Другой способ – иметь один запрос, который получает все данные для этого заголовка группы, а затем другой запрос, который получает содержимое группы.
Возможно, это также возможно сделать в запросе, но это будет сложно, так как вы хотите, чтобы первая запись с этим listTitle
имела значение для listTitle
а остальные – null
– до следующего listTitle
.
Исходя из того, что каждое поле одинаковое (listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, moDtOff), изменение проще всего в SQL
SELECT DISTINCT listTitle, listLength, listCmt, listDt, mBCFName, mBCLName, moAmt, moDtOff
Если это не одно и то же, то каким образом код сможет решить, какую новую весеннюю обувь 574 показать?
Это не так просто – вопрос в том, что показать для другого поля (например, поле «mBCFName» – «Аманда» ИЛИ «Джон»)?
используйте оператор «Группировать по» SQL и затем определите правила (max, min, avg, GROUP_CONCAT …), чтобы выбрать другие строки. Пример:
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;