[英]MySQL GROUP by or using PHP?
我有一個似乎很容易安靜的問題,但我想問你如何解決它:
在MySQL表中有以下結構:
provider artist
a 1
a 2
a 3
b 4
現在有必要回復HTML中的列表,如:
provider a
1
2
3
provider b
4
我堅持我想要對結果進行分組並用for-each
和while
循環回顯它們。
主要想法很簡單,如:
<?php $query = mysqli->query("SELECT * FROM `table` GROUP by provider");
foreach GROUP {?>
echo some styling HTML-code for each group of headline;
<?php while ($data= $query->fetch_assoc()){?>
echo some styling HTML-code for each list-item;
<?php};?>
提前致謝。
更新:
謝謝回答。
RiggsFolly的解決方案似乎運行良好。 HTML只有一個小問題。 在該行中添加HTML代碼時,周圍的div標簽不會被關閉:
echo 'provider '. $data->provider;
問題是while循環需要在div中。 每個人都缺少關閉的div-tag
if ( $current_provider != $data->provider ) {
這是原始的HTML代碼:
<?php
$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$current_provider = NULL;
while ($data = $service->fetch_object()) {
if ( $current_provider != $data->provider ) {// new provider?>
<div class="service">
<p class="lower">
<?php echo $data->provider;?>
</p>
<?php
$current_provider = $data->provider;
}?>
<a href='?artist=<?php echo $data->artist;?>'><?php echo "/".$data->artist;?</a><br/>
<?php };?>
</div><!--service -->
列表項目將很好地顯示。 但是在查看源代碼時,您可以看到關閉的div-tag丟失了。 謝謝
親切的問候。
不使用GROUP BY
似乎更簡單,因為它不會為您提供所需的數據。 因此,只需選擇它們並按提供者對它們進行排序,也可以將藝術家作為子類進行排序
<?php
$result = $mysqli->query("SELECT * FROM `table` ORDER BY provider, artist");
$current_provider = NULL;
while ($data = $result->fetch_object()){
if ( $current_provider != $data->provider ) {
// new provider
echo 'provider '. $data->provider;
$current_provider = $data->provider;
}
echo $data->artist;
}
?>
更新后:
<?php
$service = $db->query("SELECT * FROM `system` ORDER BY provider, artist");
$current_provider = NULL;
while ($data = $service->fetch_object()) {
if ( $current_provider != $data->provider ) {
if ( $current_provider !== NULL ) {
echo '</div>';
}
echo '<div class="service">';
echo '<p class="lower">' . $data->provider . '</p>';
$current_provider = $data->provider;
}
echo '<a href="?artist=' . $data->artist '">' .
$data->artist . '</a><br/>';
}
echo '</div>';
那個怎么樣。
<?php $query = mysqli->query("SELECT * FROM `table`");
$current_group = array();
while ($data= $query->fetch_assoc()){
if(in_array($data['provider'],$current_group)){
echo "<h1>New Group" . $data['provider'] ."</h1>";
$current_group[] = $data['provider']
}
echo $data['artist'] . "<br/>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.