我有一个简单的联接查询:
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']不同,但是我认为这是不好的编码。
我该怎么做??
答案 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