簡體   English   中英

PHP / MySQL:在列中顯示與特定值匹配的所有行

[英]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_GROUPPDO::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM