当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。请帮忙。
答案 0 :(得分: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
with prepared statements或PDO with prepared statements,它们更安全。
答案 1 :(得分:1)
使用此查询:
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
答案 2 :(得分:1)
您不应该使用mysql
因为它已被弃用,所以为了帮助您我已经使用PDO
完成此操作,以表明它并不像您想象的那样令人生畏。< / p>
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。
答案 3 :(得分:0)
试试这个
select DISTINCT(*) from content
或者您可以更具体地使用ie DISTINCT(columnname)
答案 4 :(得分:0)
<?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";
}