2011-01-05 75 views
0

我一直在这一段时间绞尽脑汁。下面是我在SQL数据库作为示例数据:检索并显示数据可能很简单的PHP/MYSQL问题

ID | TYPE | DATA 
1 | TXT | TEST 
2 | PHP | php 
3 | JS | JAVASCRIPT 

这仅仅是一个例子,也有TXT,PHP和JS整个表中的多个上市。我想要做的是检索所有数据,并将其全部显示在单独的下拉/选择框中。含义是,选择框将列出TXT类型的所有数据,选择框2将列出具有类型PHP的所有数据,选择框3将列出具有类型JS的所有数据。我这样做的唯一方法是针对每种不同的类型进行单独的sql查询。我知道有一种方法可以在1个查询中完成所有操作,然后以我想要的方式显示它,但我似乎无法弄清楚如何和我知道在有人帮助时它会驱使我疯狂,而且我只看到他们做到了。

回答

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>"; 
} 
+0

我觉得自己像一个假人哈哈这正是我想要做的!谢谢! – envoys 2011-01-05 19:14:57

0

您可以通过“按类型”做种分组:

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 
} 

顺便说一句,这样的做法看起来像一种破解:)

0

只需检索所有记录,并使用PHP循环。如果记录集很大以防止使用太多内存,请使用迭代器。

$lists = array(); 

foreach($recordset as $record) { 
    $lists[$record['type']][$record['id']] = $record['data']; 
} 

知道你有一个包含所有数据的数组。据我所知,得到的所有数据在一个查询

0

通过只输入命令它并在结果中使用“foreach”进行循环,当类型不同于preivous时,更改选择框。

以这种方式,你只能在数组上循环一次。