php - 使用 PHP 在 MySQL 中通过子查询获取原始价格和当前价格
问题描述
相对于这些广告,我有一张广告表和另一张价格表。当用户在应用程序中修改价格时,会在价格表中添加一个新行,其中包括价格和修改价格的日期。
我需要获取所有广告的列表,以及每个广告的第一个注册价格,以及最后一个. 我在同一个价格表上使用了双子查询。
表
ads
IDint |
广告标题varchar |
---|---|
1 | 土豆 |
2 | 番茄 |
prices
IDint |
价格decimal |
价格时间戳timestamp |
ads_idint |
---|---|---|---|
1 | 50 | 2021-02-16 21:12:36 | 1 |
2 | 5 | 2021-02-17 21:12:48 | 1 |
3 | 1000 | 2021-02-17 21:20:40 | 2 |
4 | 900 | 2021-02-18 13:20:49 | 2 |
5 | 700 | 2021-02-18 13:20:49 | 2 |
询问
SELECT ads.ad_title, prices_firsts.price AS price_first, prices_currents.price AS price_current
FROM ads
LEFT JOIN (
SELECT *
FROM prices
GROUP BY id
ORDER BY price_timestamp ASC
) prices_firsts ON prices_firsts.ads_id = ads.id
LEFT JOIN (
SELECT *
FROM prices
GROUP BY id
ORDER BY price_timestamp DESC
) prices_currents ON prices_currents.ads_id = ads.id
GROUP BY ads.id
Esta Consulta devuelve lo siguiente en mi servidor local (XAMPP):
广告标题 | price_first | 价格_当前 |
---|---|---|
土豆 | 50 | 5 |
番茄 | 1000 | 700 |
如您所见,查询结果是正确的, 但是当它在外部提供商的服务器上执行时(我已经在 1&1 IONOS 和 Arsys 西班牙进行了测试),每次执行的结果实际上都不同。有时价格以相反的顺序出现,有时相同的价格出现在两列中......
我需要的?
我需要了解问题是否出在这些提供程序的服务器配置中,或者查询是否错误。
我也乐于接受您可以通过其他方式获取价格(第一个和当前)的想法,即使它是数据库中的另一个结构。
解决方案
您也可以尝试对最小和最大日期使用子查询
select ads.id, p1.price min_price, p2.price max_price,
from ads
inner join (
select ads_id, min(price_timestamp ) min_date, max(price_timestamp ) max_date
from prices
group by ads_id
) t on t.ads_id = ads.id
INNER JOIN prices p1 on p1.ads_id = ads.id and p1.price_timestamp = t.min_date
INNER JOIN prices p2 on p2.ads_id = ads.id and p2.price_timestamp = t.mmaxn_date
推荐阅读
- java - 我想获取用户的 UID 以将特定评级存储在他们的详细信息中,但我无法访问特定用户
- c# - IDbConnection 的数据库连接模拟问题
- amazon-web-services - Selenium 在 AWS-batch 上失败
- node.js - Loopback 4 POST 方法给出 422 错误
- outlook - 在 Graph API 中为其他用户列出和创建任务
- c - C风格的宏编译
- powershell - Copy-Item 使用带有通配符的 list.txt 作为参考
- python - 子集化后如何添加列?
- reactjs - 为什么 setState 在值保持不变时重新渲染组件
- c++ - ExternalProject_Add 用于 gflags,但构建多次