Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';这是从mysql中提取数据的最有效方法,因此数据的格式如下:_Php_Mysql_Performance - Fatal编程技术网

Php 什么';这是从mysql中提取数据的最有效方法,因此数据的格式如下:

Php 什么';这是从mysql中提取数据的最有效方法,因此数据的格式如下:,php,mysql,performance,Php,Mysql,Performance,我有一个包含患者信息(姓名、dob、ssn等)的表和一个包含他们服用药物列表的表。(阿司匹林、克拉丁等)这些表由患者表的唯一id关联。所以,把玛丽·史密斯的所有药物都取出来很容易 但是,我需要做的是显示一个分页的患者列表,显示他们的姓名,患者表中的其他内容,并有一列以行分隔的药物列表。大致来说,这是: 如果我做一个简单的左连接,我会得到3行重复的Mary Smith,每行一种药物 患者表可以有数千条记录,所以我不想查询所有患者,然后循环获取他们的药物。而且,因为它是根据患者分页的,所以我不知道

我有一个包含患者信息(姓名、dob、ssn等)的表和一个包含他们服用药物列表的表。(阿司匹林、克拉丁等)这些表由患者表的唯一id关联。所以,把玛丽·史密斯的所有药物都取出来很容易

但是,我需要做的是显示一个分页的患者列表,显示他们的姓名,患者表中的其他内容,并有一列以行分隔的药物列表。大致来说,这是:

如果我做一个简单的左连接,我会得到3行重复的Mary Smith,每行一种药物

患者表可以有数千条记录,所以我不想查询所有患者,然后循环获取他们的药物。而且,因为它是根据患者分页的,所以我不知道如何获得页面上正确的患者数量以及他们的所有药物


(患者/药物只是数据的一个粗略示例;因此请不要建议重新构造数据的存储方式。)

您有几个选择

  • rowspan子句,每个用户每个细胞有一种药物。您需要运行两个SQL查询来预先计算每个用户的跨度有多大,或者将查询结果输入PHP并在那里进行计算
  • 简单状态机-每次用户更改时,都会启动一个新行,然后在用户名保持不变的情况下,继续添加更多以

    分隔的药物名称
  • 第二个可能是最简单的:

    $previous_name = null;
    $first = true;
    
    echo "<table";
    
    while($row = mysql_fetch_assoc($results)) {
         if ($row['name'] <> $previous_name) {
             if (!$first) {
                 echo "</td></tr>"; // end previous row, if it's not the first row we've output
                 $first = false;
             }
             echo "<tr><td>$row[name]</td><td>"
             $previous_name = $row['name'];
         }
         echo "$row['drug']<br />";
    }
    echo "</td></tr></table>";
    
    $previous\u name=null;
    $first=true;
    呼救

    SELECT patients.first_name, patients.last_name, GROUP_CONCAT(prescriptions.medication SEPARATOR ", ") AS meds FROM patients LEFT JOIN prescriptions ON prescriptions.patient_id = patients.id GROUP BY patients.id;
    

    我认为您正在寻找的是“子查询的浓缩”。
    检查并

    很好!我不知道
    GROUP_CONCAT
    。我会记住这一个,以备需要。+1谢谢你。如果你不知道某些东西的术语,可能很难找到答案。没问题,艾米。我完全理解。大多数人可能也不知道这个聚合函数。