2011-01-05 48 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時,更改選擇框。

以這種方式,你只能在數組上循環一次。