我无法在php中“排序”我的mysql结果。
这是我拥有的数据库
id¦ value ¦ category --------------------------- 1 ¦ Value1 ¦ category1 2 ¦ Value2 ¦ category2 3 ¦ Value3 ¦ category2 4 ¦ Value4 ¦ category3 5 ¦ Value5 ¦ category1 6 ¦ Value6 ¦ category1
我正在尝试做的是在php中得到如下结果:
类别1
类别2
类别3
任何帮助都很有用。感谢
答案 0 :(得分:1)
SQL:
$SQL = 'SELECT * FROM theTable SORT BY category ASC';
PHP:
$results = mysql_fetch....($SQL);
$record_table = array();
// Create the array for the list
foreach($results as $row)
{
$record_table[$row['category']][] = $row['value'];
}
// Output the HTML list
foreach($record_table as $key => $val)
{
echo '<ul id="' . $key . '">';
foreach($val as $v)
{
echo '<li>' . $v . '</li>';
}
echo '</ul>';
}
答案 1 :(得分:1)
SELECT id, value, category FROM table;
然后在PHP中
while($row = mysql_fetch_assoc($result)) {
$myArray[$row['category']][] = $row['value'];
}
答案 2 :(得分:0)
循环遍历结果集,在初始数组中为您遇到的每个新类别创建数组键,并将值数据推入其中。
如果存在类别键,则跳过键创建阶段,只需添加数据。
然后,您可以遍历生成的数组并输出每个类别(键)的所有数据(值数组)。
答案 3 :(得分:0)
使用GROUP_CONCAT,您将获得输出将以,
SELECT GROUP_CONCAT(value) AS valueList FROM tableName GROUP BY category
您还可以使用某种格式的GROUP_CONCAT()。像
SELECT GROUP_CONCAT( value SEPARATOR ‘-’ )
以上查询将使用-
代替,
更改订单和卖空
SELECT GROUP_CONCAT( value ORDER BY Category DESC )
然后按脚本语言重新安排,如果使用php,则尝试使用explode()
注意: GROUP_CONCAT()
会忽略NULL值。
答案 4 :(得分:0)
感谢大家的帮助。我将使用AlienWebguy和jchavannes代码的混合,这是完美的,正是我正在寻找的。 p>
代码如下所示:
<强> SQL:强>
$SQL = "SELECT * FROM table_name";
$results = mysql_query($SQL);
<强> PHP:强>
while($row = mysql_fetch_assoc($results)) {
$myArray[$row['category']][] = $row['value'];
}
foreach($myArray as $key => $val)
{
echo $key;
echo '<ul>';
foreach($val as $v)
{
echo '<li>' . $v . '</li>';
}
echo '</ul>';
}
答案 5 :(得分:0)
这是一个只用一个循环完成的解决方案。
$currentCategory = null;
$closeTag = "";
//Using MySQLi since mysql_* functions are obsoletes
$mysqli = new mysqli($host, $username, $password, $dbname);
/**
* Here I use an ORDER BY to group the result by categories
*/
$selectStmt = $mysqli->prepare("SELECT id, value, category FROM table_name ORDER BY category ASC");
$selectStmt->execute();
$selectStmt->bind_result($id, $value, $category);
while($selectStmt->fetch()) {
if ($currentCategory != $category) {
/**
* In the first iteration this variable will be empty, so the <ul> tag
* will not be closed
*/
echo $closeTag; //Close the last category list
echo $category;
echo '<ul>';
$closeTag = '</ul>';
$currentCategory = $category;
}
echo '<li>' . $value . '</li>';
}
echo '</ul>';