2015-07-29 3 views
1

Я пытаюсь запросить мою базу данных, поэтому я получу, как в Facebook, ленту новостей (новейшие сообщения) на домашнем сайте.Mysqli - Как построить запрос?

У меня есть таблица с друзьями
- userid1 - userid2- принял Так что, если принят == 1 они друзья ... enter image description here

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

SELECT * FROM friends 
WHERE user1='$ownid' or user2='$ownid' 
AND accepted='1'  

Мои сообщения таблицы :
Userid- from_user_id- timestamp- текст enter image description here

SELECT * FROM posts 
WHERE from_user='$friendsuserid' 
ORDER BY RAND() , timestamp desc 

Так что мой вопрос, Каков точный запрос, чтобы быстро получить всю почту от моих друзей и заказать их по временной метки?

Средство-> Проверить whos friedn-> getPosts -> заказ по Timestamp
и все это в 1 запросе ....?

Спасибо за каждый ответ.

+1

* «Каков точный запрос, чтобы быстро получить всю почту» * - это «быстрый» оперативное ключевое слово здесь? Если да, убедитесь, что ваш db правильно проиндексирован. –

+0

И имеет более высокий приоритет, чем OR, поэтому вам нужно указать порядок в круглых скобках (в противном случае он будет содержать строки, где 'user1 = $ ownid', независимо от того, принимается оно или нет. – riv

+0

Ох ... можете ли вы добавить пример? iam в этой точке больше, чем Confused:/ –

ответ

0

Попробуйте это:

SELECT * FROM posts p INNER JOIN friends f ON 
    ((p.from_user=f.user1 OR p.from_user=f.user2) AND (f.user1='$ownid' OR f.user2='$ownid') AND f.accepted) 
    WHERE p.from_user!='$ownid' ORDER BY p.posted_time DESC 
+0

Да, это работает и воспитывает более или менее то же самое, что и мой трудный: D ... Но как я могу перетасовать эти сообщения сейчас и сделать их случайными? \t \t \t \t \t SELECT * FROM сообщений р INNER JOIN друзей F ON \t \t ((p.from_user = f.user1 ИЛИ p.from_user = f.user2) и (f.user1 = '$ ownid' ИЛИ ​​ф. user2 = '$ ownid') И f.accepted) \t \t \t \t ГДЕ p.from_user! = '$ ownid' ORDER BY p.posted_time, по p.BY RAND() –

+0

я думал, что ты хотел, чтобы они отсортированы по временной метки? Да, вы могли бы просто «ЗАКАЗАТЬ ПО RAND()« Полагаю. Или, если вам нужны последние 20 сообщений (по дате), перетасованные в случайном порядке, вам придется заказывать по метке времени, затем ограничивать, а затем заказывать по rand. Или просто перетасовать их в PHP. Тем не менее, я не уверен, как это все будет выполняться, когда ваша база данных будет очень большой. – riv