【问题标题】:How to have MySQL return lowest last price from the price column in multiple tables如何让 MySQL 从多个表中的价格列返回最低的最后价格
【发布时间】:2018-02-15 08:18:55
【问题描述】:

我有一个包含很多表(10+)的数据库,所有表都包含以下列;

id
price
created_at

我每 5 分钟使用我的特定产品的当前价格数据更新这些表格。

我需要做的是查询所有表以返回最后价格,然后返回最低价格,以及它来自的表(或者可能只是它来自的表)。

如果我有以下表格;

store1
store2
store3...

我需要找出哪家商店的产品价格最低。

我可以通过在 PHP 变量中返回最后一个价格然后在 PHP 中进行比较来实现这一点,但如果可能的话,我宁愿使用 SQL 来做。

似乎不可能使用 html 或 ascii 文本包含任何类型的表格。格式化总是被塞满。这是一些作为图像的示例数据,这似乎是我可以在这个平台上提供它的唯一方法;

Sample Data Image

所以我需要比较所有表中的最后价格(最高 id 或时间),并找到其中最低的。查询应返回 501.09

【问题讨论】:

  • 你可以像select min(column_price) from table这样使用min函数
  • 你有海量数据吗,或者为什么一开始就把它分成几个结构相同的表?
  • 是的,我有大量数据,不是海量。需要表格的结构来跟踪产品随时间的价格变化。
  • 提供更好的表结构和一些示例数据..
  • @jerome 我不想要任何一张桌子的最低价格。我希望你使用所有表格中的最后一个价格,然后找到其中最低的。

标签: php mysql


【解决方案1】:
SELECT MIN(price) FROM
(
     SELECT price FROM (SELECT price FROM store1 ORDER BY timestamp DESC LIMIT 1)
     UNION
     SELECT price FROM (SELECT price FROM store2 ORDER BY timestamp DESC LIMIT 1)
     UNION
     SELECT price FROM (SELECT price FROM store3 ORDER BY timestamp DESC LIMIT 1)
)

如果我理解正确,这就是你想要的。

【讨论】:

  • 错误 MySQL 说:#1221 - UNION 和 ORDER BY 的使用不正确
【解决方案2】:

检查一下

SELECT MIN(price),store FROM (SELECT *,if(1,'store1','store1') as store FROM `store1`
UNION ALL
SELECT *,if(1,'store2','store2') as store FROM `store2`
UNION ALL
SELECT *,if(1,'store3','store3') as store FROM `store3`) as store;

【讨论】:

  • if(1,'store1','store1') 是什么意思?
  • if(1,'store1','store1') 只写store1 吗?
  • 我再次在您的查询中看不到任何会返回最低 LAST 价格的内容。 MIN 将返回整个表中的最小值。我需要查看每张表中的最新价格,然后找到其中最低的。同样,这些表每 5 分钟写入一条新记录,其中包含当前时间戳、价格和销售量。
  • 如果mysql中的条件,如果不是第三个值,则返回第二个值
【解决方案3】:

您可以从映射的所有表格中选择所有最新价格,例如tableName: price

SELECT store1.`price` AS store1, store2.`price` AS store2
 FROM store1, store2 
ORDER BY store1.created_at DESC, store2.created_at DESC
 LIMIT 1

输出将类似于:

store1  store2  
------  --------
50       42   

您可以使用 PHP 为所有表生成查询,进行查询,将所有最新价格(每个表)作为数组获取,然后从该数组中获取最低值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2016-04-27
    • 2019-06-13
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2016-04-25
    相关资源
    最近更新 更多