您有两个假设表:
TABLE 1
[id] [item] [amount] [cost]
1 hat 20 10
2 shoe 7 45
3 belt 2 25
TABLE 2 (many to many)
[item] [color]
hat blue
hat red
hat yellow
shoe black
shoe white
etc. etc.
当您运行查询时,您希望输出一个包含所有这两个数据的列表:
[ITEM] [AMOUNT] [COST] [AVAILABLE COLORS]
hat 20 10 blue, red, yellow
shoe 7 45 black, white
etc.
如果颜色不存在,则从单个表中获取所有信息并在循环中处理数组是单个查询。但为了容纳TABLE 2
,我可以想到两种方法:
暴力:为每次返回运行查询以从TABLE 2
获取数据,添加逗号,并将其插入TABLE 1
的结果数组中,然后输出HTML表格
丑陋的解决方法:向Table 1
添加新列,并定期使用Table 2
后面的数据字符串进行更新
......有更好的方法,对吧?
答案 0 :(得分:2)
如果您正在使用MySQL,GROUP_CONCAT
功能可能会让您感兴趣。
例如,请参阅此问题:Can I concatenate multiple MySQL rows into one field?
否则,您描述的“强力”解决方案通常是使用的解决方案 - 可能的优化是仅执行1次查询以从第二个表中获取与第一个表中的所有行同时对应的行。
例如,您:
select * from table_2 where item in ('hat', 'shoe', 'belt')
使用这个解决方案,你将在PHP方面做更多的工作,但只有2个查询 - 而不是1 +(从第一个查询返回的行数);当你从第一个查询返回很多行时,这通常要好得多。