Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对不同表中的同一字段进行排序_Php_Mysql_Multi Table - Fatal编程技术网

Php 对不同表中的同一字段进行排序

Php 对不同表中的同一字段进行排序,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

我有一些表(大约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
(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-很公平。正如我所说,我不在乎代表分数,我回答问题的主要目标是帮助别人解决问题。我没有看到您在编辑后的答案中添加的对我的查询的引用,因此我对此表示感谢,现在我可以接受了。谢谢