MySQL联接返回多行,但PHP foreach需要单条记录

时间:2018-10-10 19:59:35

标签: php mysql join foreach

我有一个简单的联接查询:

select s.id, s.account_id, s.startdate, ss.skill_id, sk.skill_name 
from shyfts s 
   join shyfts_skills ss on ss.shyft_id = s.id 
   join skills sk on sk.id=ss.skill_id

这给了我预期的结果

id      account_id  startdate   skill_id    skill_name
19783   35          2018-10-10  68          Delivery
19783   35          2018-10-10  67          Cooking
28766   76          2018-10-18  68          Delivery

我的问题是我需要做一个循环(php中的foreach),但是我只需要显示唯一的班次即可,因此请按ID进行。如您所见,班次ID 19783是重复的。当然,我可以做GROUP BY,但是会缺少一项技能(烹饪)。

我可以通过在foreach循环中添加另一个选择来做到这一点,但是它对200多个行的性能影响很大。

或者,也许像“如果当前$ row ['id']与以前的$ row ['id']不同,但是我认为这是不好的编码。

我该怎么做??

2 个答案:

答案 0 :(得分:0)

尝试检查GROUP_CONCAT(fieldName SEPARATOR ',')的此功能,您可以仅合并一个字段,然后关闭。使用GROUP BY。 就像mysql join with multiple values in one column这个问题

答案 1 :(得分:0)

我想您可以使用select different语句来不显示重复项。

select distinct s.id, s.account_id, s.startdate, ss.skill_id, sk.skill_name 
from shyfts s 
   join shyfts_skills ss on ss.shyft_id = s.id 
   join skills sk on sk.id=ss.skill_id