![](/img/trans.png)
[英]how to get random values from the MySQL database table without repeating?
[英]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.