[英]Displaying complete rows of grouped query
我有一個包含姓名和醫療處方的 MySQL 數據庫。 我要做的是遍歷屬於特定名稱的所有處方並將它們顯示在表格中,然后創建一個具有下一個名稱和一組新處方的新表格。
當我使用 GROUP BY 時,我能夠顯示患者的姓名和每個組的第一個表格行。 但我不知道如何從組內的 sub_fields 填充行。 我已經嘗試過GROUP_CONCAT
,它允許我以逗號分隔的形式顯示組中列的所有行,但我仍然需要像這樣填充子行中的所有數據:
NAME1: - START1_1 - END1_1 - DRUGID1_1
葯物 ID1_2
START1_3
NAME2: - START2_1 - END2_1 - DRUGID2_1
葯物 ID2_2
START2_3
我嘗試使用以下代碼,使用 Group by,我也嘗試使用 GROUP_CONCAT,但我不知道如何處理輸出。
$med = "SELECT * FROM {$wpdb->prefix}medicin_skema GROUP BY elevnavn";
foreach ($wpdb->get_results($med, ARRAY_A ) as $row) {
echo '<br>'.$row['elevnavn'].' ';
echo '<br>'.$row['start_dato'].' ';
echo '<br>'.$row['slut_dato'].' ';
echo '<br><br>'.$row['drugid'].' ';
}
SELECT *
FROM medicin_skema
GROUP
BY elevid
此查詢返回無意義(或“不確定”)結果。 在沒有任何聚合函數的情況下,包含 GROUP BY 子句是沒有意義的。 另外,永遠不要使用邪惡的SELECT *
- 它只會增加混亂。
然后在循環中使用此查詢來生成 n 個進一步的查詢。 這太荒謬了! 如有必要,只需創建一個帶有連接的查詢。
最后,您直接在查詢字符串中包含變量。 這被認為是不安全和不好的做法。 相反,始終使用准備好的和綁定的查詢。
如果您在構建合理且安全的查詢方面需要進一步幫助,請考慮按照以下建議修改您的問題。 請注意,它有 3 個部分。 為什么我應該為一個非常簡單的 SQL 查詢提供一個最小的可重現示例?
你所做的一切都很好。 我最終得到了這個,它有效:
$med = "SELECT * FROM {$wpdb->prefix}medicin_skema GROUP BY elevid";
$drugname = '';
$dato = '';
foreach( $wpdb->get_results($med, ARRAY_A) as $medicinskema )
{
$name=$medicinskema['elevid'];
echo '<table class="cpt-table"><tbody>';
echo '<tr><th colspan="3">Elev: ' . $medicinskema['elevid'] . '</th>';
echo '<th colspan="6">CPRnr.: ' . $medicinskema['elevcpr'] . '</th>';
echo '<th colspan="5">Udfyldt: ' . date('d-m-Y', strtotime($medicinskema['time'])) . '</th></tr>';$newquery = "SELECT * from {$wpdb->prefix}medicin_skema where elevid='$name'";
$prescriptions = $wpdb->get_results($newquery, ARRAY_A);
// dumping($prescriptions);
foreach($prescriptions as $prescription)
{
如果我理解正確 - 您正在按患者姓名分組 - 所以您將獲得每個患者姓名的記錄。
蠻力方法是選擇一組不同的患者姓名; 然后按開始日期或/結束日期或您想要的任何合理選項選擇他們訂購的每個處方 - 然后進行您的創作?
本質上是一個子選擇(我假設 elevnavn 是 NAME)
SELECT distinct(elevnavn) from {$wpdb->prefix}medicin_skema
while($row = mysql_fetch_array($result))
{
$name=$row[0];
$newquery="SELECT * from {$wpdb->prefix}medicin_skema where elevnavn='".$name"'";
execute the query
while($row = mysql_fetch_array($result))
{
retrieve dates, drug id etc
new create query
}
}
您也可以進行插入(從中選擇),但您需要先正確選擇子選擇,然后使用左連接來獲取每個名稱的所有記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.