我遇到了SQL请求的设计问题:
我需要返回如下数据:
listChannels:
-idChannel
name
listItems:
-data
-data
-idChannel
name
listItems:
-data
-data
我现在的解决方案是发送第一个请求: *" SELECT * FROM Channel WHERE idUser = ..." * 然后在循环中获取结果,我为每个raw发送另一个请求以感受嵌套列表: " SELECT FROM FROM Item WHERE idChannel = ..." 它会杀死应用程序,显然不是要走的路。
我知道如何使用join关键字,但它并不完全是我想要的,因为它会为每个listChannels的每个数据返回一行以及所有通道的信息。
如何以干净有效的方式解决这个常见问题?
答案 0 :(得分:1)
SQL用于访问二维数据表。 (有更多的可能性,但它们非常复杂,可能没有标准化)
因此,解决问题的最佳方法是使用多个请求。如果可能,还请考虑使用交易。
答案 1 :(得分:1)
执行此操作的“SQL”方法会生成包含列idchannel
,channelname
和项目列的表格。
select c.idchannel, c.channelname, i.data
from channel c join
item i
on c.idchannel = i.idchannel
order by c.idchannel, i.item;
请记住,SQL查询以表格的形式返回结果集。这意味着所有行都具有相同的列。如果需要列列表,则可以进行聚合并将项目放在列表中:
select c.idchannel, c.channelname, group_concat(i.data) as items
from channel c join
item i
on c.idchannel = i.idchannel
group by c.idchannel, c.channelname;
以上使用MySQL语法,但大多数数据库都支持类似的功能。