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