2012-07-09 42 views

回答

0

我想这将是

(SELECT * from users limit 39) 
UNION ALL 
(SELECT * from users where userid='your-user-id') 
+0

这只会选择具有该ID的用户 – 2012-07-09 08:33:33

+0

因此,“总是在该列表中检索一个用户”。这不意味着这种方式?这意味着其他39个用户(other-user-id)+ 1个特定用户id-always-there? – sel 2012-07-09 08:35:56

+0

我相信OP希望选择40个用户,并且始终将特定用户作为该选择的一部分。此查询将只会选择具有指定ID – 2012-07-09 08:37:44

0
Select * from table order by userd_id limit 40 
5

我能想到的最好的办法是:

SELECT * FROM tbl WHERE userid='your-user-id' UNION SELECT * FROM tbl WHERE userid!='your-user-id' LIMIT 39 

基本上,您选择您的用户,然后选择其他39个用户。您使用UNION结合两个SELECT结果。

1
SELECT 
    * 
FROM 
    `users` 
WHERE 
    `user_id` != 12345 
LIMIT 39 
UNION SELECT 
    * 
FROM 
    `users` 
WHERE 
    `user_id` = 12345 
ORDER BY `user_id` 
; 

这会给你第39个用户和user_id = 12345的用户。

+1

如果'user_id = 12345'在前39行中,这样就会冒风险39行... – DaveRandom 2012-07-09 08:48:24

+0

@DaveRandom你说得对!我现在改变了它。谢谢 :) – Zagor23 2012-07-09 08:52:00

0

由于大部分的选项都已经提供,检查这可以帮助你

select name from user_details where id = user_id || id != user_id order by field (id,user_id) desc limit 40; 

这会给你,如果你希望你指定的用户ID将总是在最前面结果相结合&。