|
|
|
| Приветствую всех, господа!
Задача: сделать мульти-запрос на выборку:
-новостей
-недавно созданных групп
-записей во всех группах
-фотографий
Как это можно реализовать? Должно получиться нечто вроде ленты новостей vk.com (http://vk.com/feed). | |
|
|
|
|
|
|
|
для: man1
(18.03.2012 в 03:17)
| | кто вам сказал, что все это можно сделать одним запросом?
это четыре разных запроса | |
|
|
|
|
|
|
|
для: Valick
(18.03.2012 в 07:50)
| | Тогда не пойму. Как же в ленте новостей на vk.com все это перемешано между собой? Ведь если 4 запроса сделать, то все будет совсем не так: отдельным списком фотографии, отдельным - группы, отдельным - изменения в них и.т..д... | |
|
|
|
|
|
|
|
для: man1
(19.03.2012 в 01:30)
| | вы вводя http://vk.com/feed обращаетесь к программе, которая делает 4 запроса, перемешивает, оформляет, делает еще кучу всяких штук и только потом вам отдает. При чем тут мультизапрос? Вы ж не к БД напрямую обращаетесь. | |
|
|
|
|
|
|
|
для: Sfinks
(19.03.2012 в 07:16)
| | Теперь уже стало понятнее =)
Подскажите как реализовать такое перемешивание (написал более подробное сообщение снизу). | |
|
|
|
|
|
|
|
для: man1
(19.03.2012 в 01:30)
| | понятия не имею как там на vk.com, но больше чем уверен лента там расположена в хронологическом порядке, и что за проблема отсортировать 4 выборки по дате добавления / изменения? | |
|
|
|
|
|
|
|
для: Valick
(19.03.2012 в 08:08)
| | Проблема в том, что я не понимаю как именно перемешать это все на выходе. Поясню, чего я хочу картинкой.
<?php
//mq=mysql_query
//mfa=mysql_fetch_array($data,MYSQL_ASSOC)
//hsc=htmlspecialchars($data,ENT_QUOTES);
$qphotos=mq("SELECT * FROM photos ORDER BY addtime DESC");
$qnews=mq("SELECT * FROM news ORDER BY addtime DESC");
$qforums=mq("SELECT * FROM forums ORDER BY addtime DESC");
// ---- photos
while($tphotos=mfa($qphotos)) {
$photos[]="<a href='#'><img border=0 src='./images/".hsc($tphotos['pphoto'])."'><br>".hsc($tphotos['ptitle'])."</a>";
}
// ---- news
while($tnews=mfa($qnews)) {
$news[]="<a href='#'><img border=0 src='./images/".hsc($tnews['nphoto'])."'><br>".hsc($tnews['ntitle'])."</a>";
}
//----- forums
while($tforums=mfa($qforums)) {
$forums[]="<a href='#'>".hsc($tforums['title'])."</a>";
}
//----- миксуем. Нужна помощь в этой части
$arr=array_merge($photos,$news,$forums);
// или
$arr=$photos+$news+$forums;
// ??
?>
|
http://s019.radikal.ru/i618/1203/27/cb9a75fdf7bb.jpg
|
Сверху показаны 3 запроса простых, которые выводят информацию в хронологической последовательности, я же хочу всю информацию из 3-х этих запросов между собой перемешать и тоже выводить в хронологической последовательности. Проблема тут, я не понимаю как ее перемешать и объединить.
array_merge(), а потом sort'ами ? | |
|
|
|
|
|
|
|
для: man1
(19.03.2012 в 23:55)
| | Сделайте 1 ассоциативный массив по дате.
$arr => array(
"data_tabl" => $text,
.......);
| т.е. не как у вас, а
<?php
while( $tphotos = mfa( $qphotos ) ) {
$data = strtotime( $tphotos['addtime'] );
$text = "<img border=0 src='./images/".hsc($tphotos['pphoto'])."'><br>".hsc($tphotos['ptitle']);
$arr[$data."_photos"] = $text;
}
while( $tnews = mfa( $qnews ) ) {
$data = strtotime( $tnews['addtime'] );
$text = "<img border=0 src='./images/".hsc($tnews['nphoto'])."'><br>".hsc($tnews['ntitle']);
$arr[$data."_news"] = $text;
}
while( $tforums = mfa( $qforums ) ) {
$data = strtotime( $tforums['addtime'] );
$text = hsc($tforums['title']);
$arr[$data."_forums"] = $text;
}
| потом отсортируйте по ключу ksort() и выведите новым циклом.
_____
[UPD]
Имя таблицы добавлено в ключ чтоб не перезаписалось значение с тем же временем создания. Но ведь и в одной таблице могут быть события с одинаковым временем. Поэтому еще можно добавить ключ:
<?php
$data = strtotime( $tforums['addtime'] );
$id = $tforums['id'];
$text = hsc($tforums['title']);
$arr[$data."_forums_".$id] = $text;
|
как-то так. | |
|
|
|
|
|
|
|
для: Sfinks
(20.03.2012 в 10:55)
| | Спасибо за подсказку, хорошая идея. Так думаю и реализую. | |
|
|
|