Php 从两个单独的mysql表中提取数据,回显同一表行上的匹配记录

Php 从两个单独的mysql表中提取数据,回显同一表行上的匹配记录,php,mysql,Php,Mysql,我有两个MySQL表,一个存储框号,另一个保存每个框的内容。以前,我将所有内容保存在一个表中,例如第1列=框编号,第2列=逗号分隔格式的框内容,现在我有了表“移动\u项目”第1列=框编号,表“移动\u内容”第1列=框编号,表“移动\u内容”第2列=框内容 我现在发现的问题是,尽管我可以在中回显结果,但对于包含多个内容的同一个框,我会得到单独的行: 我想要的是,如果2号框包含2个项目,我希望仅在一行上显示,两个项目都位于“内容”列下: 我目前的查询是: $sql = "SELECT move_

我有两个MySQL表,一个存储框号,另一个保存每个框的内容。以前,我将所有内容保存在一个表中,例如第1列=框编号,第2列=逗号分隔格式的框内容,现在我有了表“移动\u项目”第1列=框编号,表“移动\u内容”第1列=框编号,表“移动\u内容”第2列=框内容

我现在发现的问题是,尽管我可以在
中回显结果,但对于包含多个内容的同一个框,我会得到单独的行:

我想要的是,如果2号框包含2个项目,我希望仅在一行上显示,两个项目都位于“内容”列下:

我目前的查询是:

$sql = "SELECT move_items.*, move_contents.* FROM move_items LEFT JOIN move_contents ON move_items.boxnumber = move_contents.box ORDER BY move_items.date DESC";  
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_array($result)) {
    echo '<tr>
        <td>'.$row["boxnumber"].'</td>
        <td>'.$row["boxcontents"].'</td>
    </tr>';
}
$sql=“选择移动项目。*,移动内容。*从移动项目左侧加入移动项目上的移动内容。boxnumber=move\u contents.box按移动项目排序。日期描述”;
$result=mysqli\u查询($con,$sql);
while($row=mysqli\u fetch\u数组($result)){
回声'
“.$row[“箱号”]”
“.$row[“boxcontents”]”
';
}

我现在完全不知所措。在我回到将所有框中的内容存储在一个逗号分隔的单元格中的低效老方法之前,有人能帮我吗?我试过很多方法,比如分组,但我的经验不足。

您正在寻找
groupby
groupconcat

SELECT mi.*, group_concat(mc.contents)
FROM move_items mi LEFT JOIN
     move_contents mc
     ON mi.boxnumber = mc.box
GROPU BY mi.boxnumber
ORDER BY mi.date DESC;

您需要丢失第二个
,然后将该数组移动到第一个数组中,只需在结果之间添加一个逗号,并修剪掉后面的一个。你也可以在同样的
中对结果进行CONCAT()。当然可以,但是看看他们现在得到的截图,而不是它的布局。哦,是的,我现在想起来了;你不会做PHP。因此OP将需要一个单独的答案,并将它们结合起来以产生他们想要的结果。我想我是在评论中回答的;-)我用这个语句替换了我以前的select语句,对开头的
select mi.*、mc.contents、group_concat(mc.contents)
和group typo进行了轻微的编辑,但是,尽管move_contents表中有两行,但对于编号为20的框,当前只显示了一个框内容。早上我要检查一下,因为我现在已经脑死亡了:-(好吧,我从晚餐回来,终于找到了如何使用这个答案,我只是简单地去了
SELECT mi.*,group_concat(mc.contents)作为内容
,在我的php中,我用
$row[“contents”]来回应这个问题
,谢谢戈登和@FunkFortyNiner!我使用了这个问题的答案:。