[英]PHP / MySQL: Display all rows matching specific value in column
解決了
Sloan Trasher的回答非常有效。 我添加了另一組if語句,用於檢查subcat_id並在依據之前打印正確的標題。
if($curr_sub_cat != $row['subcat_id']) {
if($curr_sub_cat != '') {
echo "</div>\n";
}
$curr_sub_cat = $row['subcat_id'];
if($curr_sub_cat == '1') {
echo "<h1 class='anchor' id='smartphones'>Smartphones</h1>";
echo "<div class='flexed-boxes'>\n";
}
if($curr_sub_cat == '2') {
echo "<h1 class='anchor' id='tablets'>Tablets</h1>";
echo "<div class='flexed-boxes'>\n";
}
}
原始問題
我有一個數據庫表,看起來像這樣:
dev_id dev_name cat_id subcat_id
1 Apple iPhone 6 1 1 2 Apple iPhone 6s 1 1 3 Apple iPad Air 1 2
dev_id是主鍵,每個品牌的cat_id都不相同(Apple = 1,Samsung = 2,等等), subcat_id指示設備是手機(1)還是平板電腦(2)。
我想在標題為Smartphones的一個列表中回顯分配給subcat_id == 1的一個品牌的所有設備。 列subcat_id == 2的所有行都需要進入帶有標題Tablets的列表的下方。 這兩個列表都需要按主鍵升序排序。
像這樣使用PDO::FETCH_GROUP
和PDO::FETCH_COLUMN
:
$sql = "SELECT subcat_id,dev_id FROM devices WHERE cat_id='$cat_id' ORDER BY dev_id";
$data = $db->query($sql)->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN);
用所有(在本例中為Apple)設備很好地打印陣列:
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
[10] => 11
[11] => 12
)
[1] => Array
(
[0] => 13
[1] => 14
[2] => 15
[3] => 16
[4] => 17
[5] => 18
)
)
如果我實現一個for循環,如下所示:
$cat_name_lower=strtolower($cat_name);
$dev_name_ul=str_replace(array("$cat_name "," "),array("","_"),$row_all_dev['dev_name']);
foreach ($data as $dev => $dev_data)
{
echo "<div class='flexed-boxes'>
";
foreach ($dev_data as $row)
{
echo "<a class='singlebox trpl' href='/devices/".$cat_name_lower."/smartphone_details.php?dev_name=".$dev_name_ul."'>
<img class='singlebox-media' src='".$cat_name_lower."/img/".$row_all_dev['dev_img']."' alt='".$row_all_dev['dev_name']."'>
<span class='singlebox-header'>".$row_all_dev['dev_name']."</span>
</a>
";
}
echo "</div>";
}
我得到表中的第一個條目(iPhone 6,在我的實際數據庫中,dev_id為6)打印了18 張圖片以進行說明 。 但是,我希望這些行像這樣顯示 (圖片的第二行包含iPhone 6、6 Plus和6s,它們恰好具有相同的圖片)。
對我來說,似乎正確地循環了for循環,但是內部數組指針未提前一個? 我要去哪里錯了?
這個問題是一個跟進到這一個
嘗試這個:
$sql = "";
$sql .= "SELECT\n";
$sql .= " subcat_id,\n";
$sql .= " dev_id,\n";
$sql .= " dev_img,\n"; // Not sure if that column exists in the table???
$sql .= " dev_name\n";
$sql .= "FROM devices\n";
$sql .= "WHERE cat_id='$cat_id'\n";
$sql .= "ORDER BY subcat_id, dev_id";
$data = $db->query($sql)->fetchAll();
$cat_name_lower = strtolower($cat_name);
echo "<div class='flexed-boxes'>\n";
$curr_sub_cat = '';
foreach($data as $row_no => $row) {
$dev_name_ul = str_replace(array("$cat_name "," "),array("","_"),$row['dev_name']);
if($curr_sub_cat != $row['subcat_id']) {
if($curr_sub_cat != '') {
echo "</div>\n";
echo "<div class='flexed-boxes'>\n";
}
$curr_sub_cat = $row['subcat_id'];
}
echo "<a class='singlebox trpl' href='/devices/".$cat_name_lower."/smartphone_details.php?dev_name=".$dev_name_ul."'>
<img class='singlebox-media' src='".$cat_name_lower."/img/".$row["dev_img"]."' alt='".$row['dev_name']."'>
<span class='singlebox-header'>".$row['dev_name']."</span>
</a>\n";
}
echo "</div>\n";
// echo "<p>\$data:<pre>".print_r($data,true)."</pre></p>\n";
試試這個,並在您的問題中顯示結果。 這還不是答案,但是會提供給您答案所需的信息。
$sql = "";
$sql .= "SELECT\n";
$sql .= " subcat_id,\n";
$sql .= " dev_id,\n";
$sql .= " dev_name\n";
$sql .= "FROM devices\n";
$sql .= "WHERE cat_id='$cat_id'\n";
$sql .= "ORDER BY subcat_id, dev_id";
$data = $db->query($sql)->fetchAll();
echo "<p>\$data:<pre>".print_r($data,true)."</pre></p>\n";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.