Php 十层桌。我将进行更多的基准测试,然后做出选择。我认为这是这个问题最优雅的解决方案,并且认为这比使用子查询更快。 bids_history ===========================================================
十层桌。我将进行更多的基准测试,然后做出选择。我认为这是这个问题最优雅的解决方案,并且认为这比使用子查询更快。Php 十层桌。我将进行更多的基准测试,然后做出选择。我认为这是这个问题最优雅的解决方案,并且认为这比使用子查询更快。 bids_history ===========================================================,php,mysql,optimization,group-by,denormalization,Php,Mysql,Optimization,Group By,Denormalization,十层桌。我将进行更多的基准测试,然后做出选择。我认为这是这个问题最优雅的解决方案,并且认为这比使用子查询更快。 bids_history ================================================================ auction_id bid_id bidders times 1 20,25,40 user1,user2,user1 time1,time2,time3
bids_history
================================================================
auction_id bid_id bidders times
1 20,25,40 user1,user2,user1 time1,time2,time3
bids
======================
id (prim_key)
aid (auction id)
uid (user id)
cbid (current bid)
created (time created)
======================
auction_products
====================
id (prim_key)
pid (product id)
closetime (time the auction closses)
result
===============================================
auction_products.id bids.uid bids.created
2 6 time1
2 8 time2
2 10 time3
5 3 time1
5 4 time2
5 9 time3
7 3 time1
7 2 time2
7 1 time3
SELECT bids.id
FROM bids
WHERE auction = ?
ORDER BY
bids.created DESC
LIMIT 10
SELECT bo.*
FROM (
SELECT a.id,
COALESCE(
(
SELECT bi.created
FROM bids bi
WHERE bi.auction = a.id
ORDER BY
bi.auction DESC, bi.created DESC, bi.id DESC
LIMIT 1 OFFSET 9
), '01.01.1900'
) AS mcreated
COALESCE(
(
SELECT bi.id
FROM bids bi
WHERE bi.auction = a.id
ORDER BY
bi.auction DESC, bi.created DESC, bi.id DESC
LIMIT 1 OFFSET 9
), 0)
AS mid
FROM auctions a
) q
JOIN bids bo
ON bo.auction >= q.auction
AND bo.auction <= q.auction
AND (bo.created, bo.id) >= (q.mcreated, q.mid)
SELECT bids1.id
FROM ( SELECT *
FROM bids AS bids1 LEFT JOIN
bids AS bids2 ON bids1.created < bids2.created
AND bids1.AuctionId = bids2.AuctionId
WHERE bid2.id IS NULL)
ORDER BY bids.created DESC
LIMIT 10
$sql = "SELECT id FROM auctions ORDER BY created DESC LIMIT 10";
$auctions = array();
while($row = mysql_fetch_assoc(mysql_query($sql)))
$auctions[] = $row['id'];
$auctions = implode(', ', $auctions);
$sql = "SELECT id FROM bids WHERE auction_id IN ($auctions) ORDER BY created LIMIT 10";
// ...
SELECT bids1.id
FROM bids AS bids1 LEFT JOIN
bids AS bids2 ON bids1.created < bids2.created
AND bids1.AuctionId = bids2.AuctionId
GROUP BY bids1.auctionId, bids1.created
HAVING COUNT(bids2.created) < 9
SELECT a.*
FROM
(SELECT aid, uid, created FROM bids ORDER BY aid, created DESC) a,
(SELECT @prev:=-1, @count:=1) b
WHERE
CASE WHEN @prev<>a.aid THEN
CASE WHEN @prev:=a.aid THEN
@count:=1
END
ELSE
@count:=@count+1
END <= 3