我有一些表(大约20个)具有相同的结构,我试图用一个php脚本对它们进行排序,并将它们插入到一个新表中,最便宜的价格是1,最便宜的价格是2。。。最贵的栏目最便宜的20:
表A:
身份证件
名称
价格
表B:
身份证件
名称
价格
表十:
身份证件
名称
价格
表格结果:
身份证件
名称
最便宜的1
价格1
最便宜的2
价格2
...
最便宜的
价格
到目前为止,我的代码是:
(SELECT id, price, name FROM tableA WHERE id = $id)
UNION
(SELECT id, price, name FROM tableB WHERE id = $id)
ORDER BY price ASC
我一直在寻找不同的解决方案,但选择15000行需要很长时间,所以我想有另一种方法可以做到这一点。
我还没有查找更新查询,我需要在第一次修复选择。
有什么建议吗?
编辑:澄清问题,增加表格
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/