2013-09-17 3 views
2

У меня есть цитата из таблицы Mysql, пользователи и подписчики.Сортировка результатов по различным критериям в mysql

Quote(id,user_id,quote) 
Users (id,username) 
followers (follower,following_id) 

То, что я хочу сделать, это извлечь все цитаты, вопрос о том, как сортировать цитаты, таким образом, что цитаты пользователей, которые я отслеживаю являются первым, то те пользователи, которые преследуют меня, then цитаты других пользователей.

Это мой SQL-запрос:

$sql='Select 
    id, 
    quote 
FROM 
    quote 
WHERE 
    quote like '.$pdo->quote('%'.$item.'%'); 

Я имею в виду, если вы используете facebook, и вы начали исследования для ваших друзей, вы увидите, что люди, которых вы друзья с являются сначала, чтобы отобразить, а затем те, которые вы знаете, а затем те, с которыми вы, возможно, разговаривали ....

Я нахожу проблему с построением запроса после ORDER BY. Также я искал это в Интернете, но я не нашел его, я думаю, что я не использую правильные ключевые слова для этой проблемы.

Заранее спасибо.

+0

Пример данные помогут понять вашу проблему. –

+0

@SmootQ. , , Пожалуйста, покажите запрос, который у вас есть, без 'order by'. –

+0

@GordonLinoff, я отредактировал вопрос – SmootQ

ответ

2

Отношения между вашими таблицами неясны. Но вы можете попробовать что-то вроде этого

SELECT Quote 
    FROM Quote q, Users u, Followers f 
    WHERE q.user_id = u.id 
    AND q.user_id = f.follower 
UNION 
SELECT Quote 
    FROM Quote q, Users u, Followers f 
    WHERE q.user_id = u.id 
    AND q.user_id <> f.follower 
+0

Большое вам спасибо, вы дали мне искру для решения, поэтому в этом случае я должен использовать Union, а не order by ... thanx +1, я собираюсь попробуйте. – SmootQ

1

Я думаю, что это может быть сделано путем запроса котировок пользователей вы следуете, то цитаты из ваших последователей, а затем другие, и присоединиться к результатам, как это.

SELECT A.QUOTE FROM QUOTE A WHERE A.USER_ID IN (SELECT B.ID FROM USER B WHERE B.USERNAME IN (SELECT FOLLOWER FROM FOLLOWERS WHERE FOLLOWING_ID=<YOUR ID>)) 
UNION 
SELECT A.QUOTE FROM QUOTE A WHERE A.ID IN 
(SELECT B.ID FROM USERS B , FOLLOWERS WHERE FOLLOWING_ID=B.ID AND B.ID=<YOUR ID>) 
UNION 
SELECT A.QUOTE FROM QUOTE A WHERE A.ID NOT IN 
((SELECT B.ID FROM USERS B , FOLLOWERS WHERE FOLLOWING_ID=B.ID AND B.ID=<YOUR ID>) UNION 
(SELECT B.ID FROM USER B , FOLLOWERS WHERE FOLLOWER=B.USERNAME AND B.USERNAME=<YOUR USERNAME)) 

Благодаря Niraj Rathi

+0

Большое вам спасибо, я пытаюсь использовать UNION вместо ORDER BY. +1 – SmootQ

Смежные вопросы