显示分组查询的完整行

时间:2019-08-23 22:52:54

标签: php mysql

我有一个包含名称和医疗处方的MySQL数据库。我要做的是遍历属于某个特定名称的所有处方,并将其显示在表格中,然后使用下一个名称和一组新的处方创建一个新表格。

使用GROUP BY时,我可以显示患者的姓名和每个组的第一行。但是我不知道如何从组内的sub_fields中填充行。我尝试使用GROUP_CONCAT,它允许我以逗号分隔的形式显示该组中一列的所有行,但仍然需要从子行中填充所有数据,如下所示:

NAME1:  -START1_1  -END1_1  -DRUGID1_1

  • START1_2
  • END1_2
  • DRUGID1_2

  • START1_3

  • END1_3
  • DRUGID1_3

NAME2:  -START2_1  -END2_1  -DRUGID2_1

  • START2_2
  • END2_2
  • DRUGID2_2

  • START2_3

  • END2_3
  • DRUGID2_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'].' '; 
 }

3 个答案:

答案 0 :(得分:0)

这不是答案,但是OP要求我详细说明评论,所以这里...

SELECT * 
  FROM medicin_skema 
 GROUP 
    BY elevid

此查询返回无意义(或“不确定”)结果。在没有任何聚合函数的情况下,包含GROUP BY子句是没有意义的。另外,切勿使用邪恶的SELECT *-这只会增加混乱。

然后在循环中使用此查询来生成n个其他查询。这太可笑了!相反,如有必要,只需使用联接创建一个查询。

最后,您直接在查询字符串中包含变量。这被认为是不安全和不道德的做法。相反,请始终使用准备好的和绑定的查询。

如果您希望在构建明智且安全的查询方面获得更多帮助,请考虑按照以下建议修改问题。请注意,它分为三个部分。 Why should I provide a Minimal Reproducible Example for a very simple SQL query?

答案 1 :(得分:-1)

您所做的一切都很好。我最终完成了这个工作,

$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) 
   {

答案 2 :(得分:-2)

如果我理解正确-您正在按患者姓名分组-这样您将获得一份“每个患者姓名”记录。

暴力破解方法是选择一组不同的患者姓名;然后选择按开始日期或/结束日期或您想要的任何明智选项排序的每种处方-然后进行创建?

本质上是一个子选择(我假设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
   }

 }

您还可以执行插入操作(从中选择),但是您首先需要正确选择子选择,然后使用左连接获取每个名称的所有记录。