Php 对不同表中的同一字段进行排序
我有一些表(大约20个)具有相同的结构,我正在尝试用php脚本对它们进行排序,并将它们插入一个新表中,在最便宜的1中价格最低,然后在最便宜的2中价格更高。。。列中最贵最便宜的20: 表A: idPhp 对不同表中的同一字段进行排序,php,mysql,multi-table,Php,Mysql,Multi Table,我有一些表(大约20个)具有相同的结构,我正在尝试用php脚本对它们进行排序,并将它们插入一个新表中,在最便宜的1中价格最低,然后在最便宜的2中价格更高。。。列中最贵最便宜的20: 表A: id 名称 价格 表B: id 名称 价格 表X: id 名称 价格 表格结果: id 名称 最便宜的1 价格1 最便宜的2 价格2 … 最便宜的X 普莱斯 到目前为止,我的代码是: (SELECT id, price, name FROM tableA WHERE id = $id) UNION (SELE
名称
价格 表B: id
名称
价格 表X: id
名称
价格 表格结果: id
名称
最便宜的1
价格1
最便宜的2
价格2
…
最便宜的X
普莱斯 到目前为止,我的代码是:
(SELECT id, price, name FROM tableA WHERE id = $id)
UNION
(SELECT id, price, name FROM tableB WHERE id = $id)
ORDER BY price ASC
我一直在寻找不同的解决方案,但为15000行选择太长时间,所以我想还有另一种方法。
我还没有寻找更新查询,我需要在第一时间修复select
有什么建议吗
编辑:澄清问题,提供更多表格
编辑2:解决方案
我终于弄对了。这是选择最便宜商品的查询:
我选择每个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
然后,我按照GLGL的建议在新表中插入:
('INSERT INTO table (id, name, Position, price) VALUES (?, ?, ?, ?) ');
我在Oracle上这样做了,但是MySQL的语法应该非常类似(select应该可以工作,而不需要任何更改) 结果:
NAME MXPRICE MNPRICE
1 a 14.23 12.23
2 b 16.23 9.23
我在Oracle上这样做了,但是MySQL的语法应该非常类似(select应该可以工作,而不需要任何更改) 结果:
NAME MXPRICE MNPRICE
1 a 14.23 12.23
2 b 16.23 9.23
如果您可以控制表的最终结构:不要这样做。相反,只使用一个表,并添加一个字段来指示它的用途 目标表的结构也不好。相反,您应该使用
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
(这个过程在数据库理论中称为“规范化”。)
将所有输入表放在一个表中可以简化:
或者干脆
SELECT name,
max(price) mxprice,
min(price) mnprice
FROM tableABC
GROUP BY NAME
.如果您可以控制表的最终结构:不要这样做。相反,只使用一个表,并添加一个字段来指示它的用途 目标表的结构也不好。相反,您应该使用
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
(这个过程在数据库理论中称为“规范化”。)
将所有输入表放在一个表中可以简化:
或者干脆
SELECT name,
max(price) mxprice,
min(price) mnprice
FROM tableABC
GROUP BY NAME
.这正是我想要的,但这只适用于2个表(最小/最大)。我应该在最后有20张桌子,所以我的目的是从最便宜的到最贵的顺序。这正是我想要的,但这只适用于2张桌子(最小/最大)。我应该在最后有20个表,所以我的目的是从最便宜的到最贵的顺序。事实上,我可以创建我需要的表,我有完全的控制权。cheapestorder应该包含什么?我怎么得到它?因为我需要关于每一行每个表的每个“排名”的信息。@glglglgl-窃取我的查询做得很好。@dcp是的-但前提条件发生了变化。@glglglglgl-这是不道德的体育精神和不礼貌的行为,特别是因为你甚至都没有对窃取查询的原始答案进行投票。但不管怎样。如果你对代表积分如此狼狈为奸,你可以拥有他们。哎呀。我认为这个社区是关于尊重的。@glglglgl-很公平。正如我所说,我不在乎代表分数,我回答问题的主要目标是帮助别人解决问题。我没有看到您在编辑后的答案中添加的对我的查询的引用,因此我对此表示感谢,现在我可以接受了。谢谢。事实上,我可以创建我需要的表格,我完全可以控制。cheapestorder应该包含什么?我怎么得到它?因为我需要关于每一行每个表的每个“排名”的信息。@glglglgl-窃取我的查询做得很好。@dcp是的-但前提条件发生了变化。@glglglglgl-这是不道德的体育精神和不礼貌的行为,特别是因为你甚至都没有对窃取查询的原始答案进行投票。但不管怎样。如果你对代表积分如此狼狈为奸,你可以拥有他们。哎呀。我认为这个社区是关于尊重的。@glglglgl-很公平。正如我所说,我不在乎代表分数,我回答问题的主要目标是帮助别人解决问题。我没有看到您在编辑后的答案中添加的对我的查询的引用,因此我对此表示感谢,现在我可以接受了。谢谢