簡體   English   中英

如何在不重復php中顯示值的情況下顯示mysql數據庫中的值

[英]how to show values from mysql database without repeating values in php

當Iam從表中顯示數據庫值時,它只是根據內容重復它們。 第一個表是內容。

 id | category_id  |  name
-----------------------------
 1  |     2        |  Jason
 2  |     1        |  Richard
 3  |     2        |  John

類別表:-

 id | name
 ---------
  1 | Manager
  2 | Employee

我使用查詢:

$query=mysql_query("SELECT * FROM content");
while($row=mysql_fetch_array($query)){
                 $data[] = array('id'=> $row['id'],
                                'category_id' => $row['category_id'], 
                                'name' => $row['name']
                           );
            }
  for($i=0;$i<count($data);$i++){
     echo $data[$i]['category_id'];
     echo $data[$i]['name']."<br/>";
  }

  OUTPUT:-
  2 Jason 
  2 John
  1 Richard

但是我想要的是:

 OUTPUT:-
 2 Jason John
 1 Richard

現在,當回顯結果時,它向我顯示category_id 2次,category_id = 2及其2個名稱,但我要顯示的僅是category_id 1次,其對應的2個名稱,category_id = 2。 請幫忙。

試試這種方法,對我有用:

$query = mysql_query("SELECT COUNT(*), category_id, name, 

 GROUP_CONCAT(name separator ' ') as name FROM content  
 WHERE category_id=1 OR category_id=2 GROUP BY category_id 
 ORDER BY category_id DESC");

    while($row=mysql_fetch_array($query)){

        echo $row['category_id'] . " " . $row['name'] . "<br>";

    }

另外,關於不推薦使用的mysql_*函數的簡要說明。

mysqli與預處理語句一起使用,或將PDO與預處理語句一起使用它們會更安全。

使用此查詢:

SELECT id, category_id, GROUP_CONCAT(name SEPARATOR ' ') AS name
FROM content
GROUP BY category_id

有關如何使用GROUP BY和GROUP_CONCAT的一些快速教程,請參見此處:
w3schools.com / GROUP BY
mysqltutorial.org / GROUP_CONCAT

您不應該使用已棄用的mysql ,以便為您提供幫助,以幫助我完成PDO以顯示其不像您想象的那樣令人生畏。

PDO與數據庫的連接:

try{
    $db = new PDO ('mysql:host=YourHost;dbname=YourDatabaseName', 'YourDatabaseUserName', 'YourDatabasePassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo $e->getMessage();
    die();
}

上面的連接使用了try catch ,並通過使用getMessage()函數來刪除所有不必要的信息,從而使所有錯誤更清晰易讀。

您在PDO中執行的查詢:

$sql = "SELECT GROUP_CONCAT(name SEPARATOR ' ') AS names FROM yourtable GROUP BY category_id";
$query = $db->query($sql);
$results = $query->fetchAll(PDO::FETCH_OBJ);

foreach($results as $result){
    echo "<pre>", ($result->names), "</pre>";
}

這是使用PDO查詢數據庫的最基本方法,但是,如果您像這樣開始使用它,您會發現,更容易開發出更深入,更安全的數據放入和取出數據庫的方法,這些方法有助於防止SQL注入。

希望這能為您帶來一點思考,並有助於您轉向更安全的API。

嘗試這個

select DISTINCT(*) from content也可以使用DISTINCT(columnname)來更具體

<?php

// Using MySQL GROUP_CONCAT

$sql = 'SELECT category_id, GROUP_CONCAT(name separator \' \') FROM content GROUP BY category_id';


// Or PHP reduce as below
// Dummy Records
$records = [
    ['id' => 1, 'category_id' => 2, 'name' => 'Jason'],
    ['id' => 2, 'category_id' => 1, 'name' => 'Richard'],
    ['id' => 3, 'category_id' => 2, 'name' => 'John']
];

$result = array_reduce($records, function($carry, $record) {
    if (!array_key_exists($record['category_id'], $carry)) {
        $carry[$record['category_id']] = [];
    }

    $carry[$record['category_id']][] = $record['name'];

    return $carry;
}, []);

foreach ($result as $categoryId => $names) {
    echo $categoryId . ' ' . implode(' ', $names) . "\n";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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