我目前在表格中有这样的数据:
id | type
------------
1 | 1
2 | 1
3 | 2
4 | 2
5 | 3
6 | 3
6 | 3
我需要显示如下数据:
Type 1
--All type ones go here
Type 2
-- All type twos go here
Type 3
All type threes go here
我现在的方法是使用两个独立的sql语句和循环。
select distinct type as type from table
while()
{
select type from table where type = type;
while()
{
}
}
有没有更好的方法来做到这一点并获得我想要的结果,或者只使用两个循环?
答案 0 :(得分:3)
ORDER BY type ASC
。现在您只有一个循环,并且可以通过关联数组中的类型访问ID。通过键遍历数组应该是微不足道的,然后显示该键的所有ID。
答案 1 :(得分:1)
SELECT
`type`,
GROUP_CONCAT(`id` SEPARATOR ',') as `ids`
FROM
`table`
GROUP BY
`type`
ORDER BY
`type`;
在每个周期迭代中,$row['ids']
可能是explode()
d,如:
<?php
while($row = $result->fetch_assoc()){
$ids = explode(',', $row['ids']);
echo 'Type ', $row['type'], PHP_EOL;
if(empty($ids))continue;
foreach($ids as $id){
echo $id, ' ';
}
echo PHP_EOL;
}
?>
答案 2 :(得分:1)
只需选择所有内容,并在每次点击新类型时进行检查。这允许您仅使用一个查询在O(n)时间内列出所有内容。
$result = mysql_query('SELECT id, type FROM table ORDER BY type ASC');
$type = 0;
while ($row = mysql_fetch_assoc($result) {
if ($type != $row['type']) {
// New type found
$type = $row['type'];
echo "Type " + $row['type'] + "\n";
}
echo "-- " + $row['id'] + "\n";
}
这会给你一个这样的输出
Type 1
-- 1
-- 2
Type 2
-- 3
-- 4
Type 3
-- 5
-- 6
-- 7