我有一些具有相同结构的表(大约 20 个),我试图用 php 脚本对它们进行排序,并将它们插入到一个新表中,其中最便宜的价格在 cheapest1 中,然后是 cheapest2 中的价格更贵...和列中最贵的 cheapest20:
表 A:
编号
姓名
价格
表 B:
编号
姓名
价格
表 X:
编号
姓名
价格
表格结果:
编号
姓名
最便宜的1
价格1
最便宜的2
价格2
...
最便宜X
价格X
到目前为止我的代码是:
(SELECT id, price, name FROM tableA WHERE id = $id)
UNION
(SELECT id, price, name FROM tableB WHERE id = $id)
ORDER BY price ASC
我一直在寻找不同的解决方案,但 SELECT 15000 行的时间太长,所以我想还有另一种方法可以做到这一点。 更新查询还没找,需要第一时间修复select。
有什么建议吗?
编辑:澄清问题,有更多表格
EDIT2:解决方案
我终于明白了。这是选择最便宜的查询: 我选择每个 ID 并浏览:
(SELECT price AS P1, name, id FROM tableA WHERE id = ?) UNION (SELECT price AS P1, name, id FROM tableB WHERE id = ?) UNION (SELECT price AS P1, name, id FROM tableC WHERE id = ?) ORDER BY P1 ASC
然后我按照 glglgl 的建议插入新表:
('INSERT INTO table (id, name, Position, price) VALUES (?, ?, ?, ?) ');
最佳答案
如果您可以控制表格的最终结构:请不要那样做。相反,只使用一个表并添加一个字段来指示它的用途。
目标表的结构也不好。相反,你应该使用
tableResult:
id
name
cheapestorder
cheapest
price
这让一切变得更简单。
因此,不是让一行包含
id=10, name=foo, cheapest1=a, cheapestprice1=10, cheapest2=b, cheapestprice2=13,
你有几行
id=10, name=foo, cheapestorder=1, cheapest=a, cheapestprice=10
id=10, name=foo, cheapestorder=2, cheapest=b, cheapestprice=13
(这个过程在数据库理论中叫做“规范化”。)
将所有输入表合并为一个简化了 dcp's query :
SELECT name,
max(mxprice) mxprice,
min(mnprice) mnprice
FROM
(
SELECT name,
max(price) mxprice,
min(price) mnprice
FROM tableABC
GROUP BY NAME, tbltag
) a
GROUP BY NAME
或者甚至只是
SELECT name,
max(price) mxprice,
min(price) mnprice
FROM tableABC
GROUP BY NAME
.
关于php - 对不同表中的相同字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10857570/