我有一个包含名称和医疗处方的MySQL数据库。我要做的是遍历属于某个特定名称的所有处方,并将其显示在表格中,然后使用下一个名称和一组新的处方创建一个新表格。
使用GROUP BY时,我可以显示患者的姓名和每个组的第一行。但是我不知道如何从组内的sub_fields中填充行。我尝试使用GROUP_CONCAT
,它允许我以逗号分隔的形式显示该组中一列的所有行,但仍然需要从子行中填充所有数据,如下所示:
NAME1: -START1_1 -END1_1 -DRUGID1_1
DRUGID1_2
START1_3
NAME2: -START2_1 -END2_1 -DRUGID2_1
DRUGID2_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'].' ';
}
答案 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
}
}
您还可以执行插入操作(从中选择),但是您首先需要正确选择子选择,然后使用左连接获取每个名称的所有记录。