我有两个表格......第一个是带有(page_id,page_title)行的页面列表。第二个是这些页面上的商品列表,每个商品都有一个价格(item_id,page_id,item_title,item_price)。MYSQL select 3“results id”的结果
我想从每个页面抓取前三个项目(首先按最高item_price排序),页面中累积价格最高的页面排在第一位。这远远超出了我的MYSQL能力,我正在寻求如何使这个最有效率的建议! :) 谢谢!
我有两个表格......第一个是带有(page_id,page_title)行的页面列表。第二个是这些页面上的商品列表,每个商品都有一个价格(item_id,page_id,item_title,item_price)。MYSQL select 3“results id”的结果
我想从每个页面抓取前三个项目(首先按最高item_price排序),页面中累积价格最高的页面排在第一位。这远远超出了我的MYSQL能力,我正在寻求如何使这个最有效率的建议! :) 谢谢!
你可以通过几种不同的方式来做到这一点。我会做的是运行一个查询,说:“让我的所有页面按照它们的项目总数排序”,然后在php中循环遍历它们,并为每个页面执行一个“让我获得当前页面的前3项” 。
有意义吗?
查询一个(未经测试,我的手机上写的):
SELECT p.page_name, (SELECT SUM(item_price) FROM items WHERE page_id = p.page_id) AS cumulative_price FROM pages p ORDER BY cumulative_price DESC;
查询两(还未经测试)通过一个查询结果的循环:
SELECT * FROM items WHERE page_id = '$currentPageId' ORDER BY item_price DESC LIMIT 3;
显然你会在第一个查询中包含页面id以供第二个查询使用。 – 2012-03-25 03:10:35
我只是要打电话给第二个表“表2”和ITEM_ID我找了“SOME_ITEM_ID”
SELECT * FROM `table2` WHERE `item_id` = 'SOME_ITEM_ID' ORDER BY `item_price` DESC;
在英语中是什么这说的是:
从表2中选择的一切,其中ITEM_ID是这个,以降序
由ITEM_PRICE对列表进行排序此SQL语句将返回每一个命中,但您只需输出代码中的前三个。
我这里不好 - 我编辑了原帖。项目表通过“page_id”链接到页表。项目同时具有“item_id”和“page_id”。 – PotatoFro 2012-03-26 17:52:25
我的直觉告诉我,有可能是没有更快办法做到这一点,而不是做一个for循环中的应用在所有的页面,在做一个小select item_price from item where page_id = ? order by item_price desc limit 3
每个paqe,并可能坚持的结果像memcached之类的东西,所以你不会对数据库征税太多。
但我喜欢挑战,所以我会尝试它。
SELECT p1.*, i1.*,
(SELECT count(*)
FROM items i2
WHERE i1.item_price < i2.item_price
AND p1.page_id = i2.page_id) price_rank,
FROM pages p1
LEFT OUTER JOIN items i1
ON p1.page_id = i1.page_id
WHERE price_rank < 3;
那奇子选择是要大概做一个可怕的很多工作在items
每一行。许多其他RDBMses有一个称为窗口函数的功能,可以更加优雅地进行上述操作。举例来说,如果你使用PostgreSQL,你可以写:
SELECT p1.*, i1.*,
RANK(i1.item_price)
OVER (PARTITION BY p1.page_id
ORDER BY i1.item_price DESC) price_rank
FROM pages p1
LEFT OUTER JOIN items i1
ON p1.page_id = i1.page_id
WHERE price_rank <= 3;
,并且计划会安排在一个令发生导致排名正确访问行。
您想一次获得所有页面的前3项,还是一次获得一页? – 2012-03-25 02:52:49
我想输出所有页面的列表,显示每个页面的前三项(顶部是最高价格,页面按累计最高价格排序)。谢谢! – PotatoFro 2012-03-25 02:54:36
给定一个项目,你怎么知道它属于哪个页面? – 2012-03-25 05:04:08