我已经绞尽脑汁待了一会儿。以下是我在SQL数据库中的数据作为示例:
ID | TYPE | DATA
1 | TXT | TEST
2 | PHP | php
3 | JS | JAVASCRIPT
这只是一个例子,整个表格中有多个TXT,PHP和JS列表。我想要做的是检索所有数据并将其全部显示在单独的下拉/选择框中。意思是,选择框1将列出所有类型为TXT的数据,选择框2将列出所有类型为PHP的数据,选择框3将列出所有类型为JS的数据。我这样做的唯一方法是为每个不同的类型执行单独的SQL查询。我知道有一种方法可以在1个查询中完成所有操作,然后以我想要的方式显示它但是我似乎无法弄清楚当有人帮助时我会怎样并且我知道它会让我疯狂他们做到了。
答案 0 :(得分:1)
我知道在一个查询中获取所有数据的唯一方法就是执行通用SELECT * FROM tbl
,然后您可以将它们分组到代码中:
$res = mysqli_query('SELECT * FROM tbl');
$data = array();
while($row = mysql_fetch_assoc($res)) {
$type = $row['type'];
$data[$type][] = $row;
}
// $data contains all of the record, grouped by the TYPE column
foreach($data as $type => $records) {
echo "records for $type: <select>";
foreach($records as $record) {
echo "<option value='$id'>$id</option>";
}
echo "</select>";
}
答案 1 :(得分:0)
您可以使用“ORDER BY TYPE”进行分组:
SELECT id, data
FROM table
ORDER BY type;
然后,在数据输出循环中,您可以跟踪当前类型,并在类型更改后构建另一个选择框:
$currentType = "no type";
while($row = mysql_fetch_assoc($res)) {
if ($currentType != $row['type']) {
$currentType = $row['type'];
// start new select box here
}
// do some other work here
}
顺便说一下,这种方法看起来像是一种黑客攻击:)
答案 2 :(得分:0)
只需检索所有记录并使用PHP循环它们。如果记录集非常庞大以防止使用太多内存,请使用迭代器。
$lists = array();
foreach($recordset as $record) {
$lists[$record['type']][$record['id']] = $record['data'];
}
知道你有一个包含所有数据的数组。
答案 3 :(得分:0)
只需按类型对其进行排序,然后在结果中使用“foreach”进行循环,当类型与preivous不同时更改选择框。
这样你只需在数组上循环一次。