开发者

Order of "id" changed in subquery?

I have this query

SELECT bul.id 
FROM bul 
WHERE id  IN (SELECT hotid AS 开发者_运维知识库parentid 
FROM likehot 
WHERE hotid IN (SELECT id 
FROM bul 
WHERE  DATE  >= '1315976410') 
GROUP BY hotpid 
ORDER BY COUNT( hotid ) DESC )

when I runt this inner query

SELECT id 
FROM bul 
WHERE  DATE  >= '1315976410') 
GROUP BY hotpid 
ORDER BY COUNT( hotid ) DESC

I get

parentid
3655
3656
3622
3644

and when I run whole query I get

parentid
3656
3655
3622
3644

I really don't understand why the order of the ids change?

SOLUTION :-

<?php
 $query_hotpress_like = "SELECT hotid AS parentid FROM likehot WHERE hotid IN (SELECT id FROM bul WHERE  DATE  >= '" . (time() - (24 * 60 * 60)) . "') GROUP BY hotid ORDER BY COUNT( hotid ) DESC";
                $exe_hotpress_like = execute_query($query_hotpress_like, true, "select");
                $temp_like1 = array();
                foreach ($exe_hotpress_like as $kk => $exe_like) {

                    $temp_like1[] = "'" . $exe_like['parentid'] . "'";
                }
                $temp_like = str_replace(",''", "", implode(',', $temp_like1));

                $query_hotpress = "SELECT bul.id,photo_album_id,eventcmmnt_id,link_url,youtubeLink,link_image,id, mem_id, subj, body, bul.date,parentid, from_id, visible_to,image_link,post_via FROM bul WHERE id IN ($temp_like) ORDER BY FIELD(id,$temp_like ) LIMIT 5";

                ?>

execute_query() is the inbuilt function to get the result of query.


That happens because for IN operator order doesn't matter.

If you need to sort outer query - sort outer query.


Since you didn't specify an order for the "whole" query, the database is at liberty to return rows in any order it wants. The specific order you get is a result of how looking up rows is done when using the IN operator.

On your other query you are specifying an order yourself, so the database has to honor it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜