mysql - 如何在 SQL 中获取具有 MAX 和 MIN 值的行的 ID

标签 mysql sql

我正在尝试使我的网站使用的查询更有效率。

由于对 SQL 有点含糊,我还没有真正学会如何使用嵌套查询,但我刚刚设法获得了非常接近我想要的东西。

我卖吉他,我有一个大数据库,其中单独列出了具有不同表面处理选项的所有产品。项目在 dB 中具有唯一 ID,但按其标题分组,例如,Gibson Les Paul Standard 在我的 dB 中列出了 7 次,有 7 种不同的表面处理选项。并非所有成品选项都一定具有相同的价格,也并非所有成品选项都一定有现货。

在我网站的搜索结果页面中,我希望能够显示:

1) 每个产品只有一个记录,即 Gibson LP Std 有 1 个记录,然后可以子链接到不同的饰面。

2) 显示的实际产品必须是最便宜的成品选项,或者是库存中最便宜的。

这目前正在我的网站上运行,但它正在使用 N+1 查询并且运行速度似乎非常慢,但是要了解我的意思的示例,请单击此处:http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls (如果该死的东西有效的话)

第 1 部分很好,我可以在 SQL 中对标题进行分组,这就是问题所在。

使用以下 SQL 查询,我可以获得最低价和最高价,我已经计算了有多少变体,我还有最大和最小库存水平。

results.Open "SELECT * FROM 
(SELECT *, count(id) as Variants, MAX(price) as highestPrice, MIN(price) as
lowestPrice, MAX(shopstock) as highestStock, MIN(shopstock) as lowestStock FROM 
products WHERE item LIKE '%"& replace([searchterm]," ","%") &"%' GROUP BY item) 
AS UnknownVar LIMIT 40", conn, 3, &H0001

我需要做的是获取代表最大和最小库存和价格的行的 ID 值。

我基本上需要能够在其上运行 if/or 逻辑,但我不确定这是否可行。

所以,我需要能够说

if Item_With_Cheapest_Price is in stock, display this as the thumbnail & link
else 
display first item in price sorted list where stock >=1

我还需要一个回退,如果没有成品库存,显示最便宜的。

数据库是使用 ODBC 连接的 MySQL,我目前正在使用经典 ASP 编写脚本,但打算升级到 .NET,一旦我弄清楚了如何!!! :-)

最佳答案

我认为对于按部分排序你应该使用类似的东西

order by case
    when stock > 0 then 0
    when stock < 0 then 1
    end ascending,
    price ascending

我没有检查语法,但就是这样。您可以按顺序搜索案例以获取更多信息。

至于你们其他的需求,我需要表结构来更好地理解...

关于mysql - 如何在 SQL 中获取具有 MAX 和 MIN 值的行的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663744/

相关文章:

mysql - 使用零计数的左连接和内连接对结果进行分组

python - AWS Lambda 和 MySQL 连接处理

php - 在 mysql 上使用 AES 加密,最短 URL

java - 是否有任何特定于 DBMS 的 SQL 客户端 Java 库(不一定与 JDBC 相关或兼容)

mysql - 为什么 ifnull() 在 MariaDB 10.1+ 中返回 DECIMAL 而不是 BIGINT?

mysql - SQL INNER JOIN 和 AVG() 返回错误数据

sql - 从表中删除行时的权限

php - 如何检测传入的聊天消息?

php - LAST_INSERT_ID() 未返回所有标签

mysql - 调用存储函数的派生属性抛出 StreamCorruptedException