php - 对不同表中的相同字段进行排序

标签 php mysql multi-table

我有一些具有相同结构的表(大约 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/

相关文章:

mysql - Active Record 和迁移格式错误的日期

Android ormlite 多表映射

mysql - 将 3 个 MySQL 表合并到合并表中得到太多结果

php - mysql如何进行多表操作?

php - 考虑到 toInt 返回 0 表示失败而不是 false,在 PHP 中将任何字符串数字转换为整数类型

java - PHP 客户端和 Java 服务器之间的 SSL 套接字连接

php - 将检索到的数据库记录传递给 php 文件

javascript - jquery (ajax) click 使 php 脚本运行多次

php - 如何查找按MySQL分组查询的值的数量

php - 数据库不更新,mysql_error不显示错误