Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Мульти-запрос на выборку
 
 автор: man1   (18.03.2012 в 03:17)   письмо автору
 
 

Приветствую всех, господа!

Задача: сделать мульти-запрос на выборку:
-новостей
-недавно созданных групп
-записей во всех группах
-фотографий

Как это можно реализовать? Должно получиться нечто вроде ленты новостей vk.com (http://vk.com/feed).

  Ответить  
 
 автор: Valick   (18.03.2012 в 07:50)   письмо автору
 
   для: man1   (18.03.2012 в 03:17)
 

кто вам сказал, что все это можно сделать одним запросом?
это четыре разных запроса

  Ответить  
 
 автор: man1   (19.03.2012 в 01:30)   письмо автору
 
   для: Valick   (18.03.2012 в 07:50)
 

Тогда не пойму. Как же в ленте новостей на vk.com все это перемешано между собой? Ведь если 4 запроса сделать, то все будет совсем не так: отдельным списком фотографии, отдельным - группы, отдельным - изменения в них и.т..д...

  Ответить  
 
 автор: Sfinks   (19.03.2012 в 07:16)   письмо автору
 
   для: man1   (19.03.2012 в 01:30)
 

вы вводя http://vk.com/feed обращаетесь к программе, которая делает 4 запроса, перемешивает, оформляет, делает еще кучу всяких штук и только потом вам отдает. При чем тут мультизапрос? Вы ж не к БД напрямую обращаетесь.

  Ответить  
 
 автор: man1   (19.03.2012 в 23:56)   письмо автору
 
   для: Sfinks   (19.03.2012 в 07:16)
 

Теперь уже стало понятнее =)
Подскажите как реализовать такое перемешивание (написал более подробное сообщение снизу).

  Ответить  
 
 автор: Valick   (19.03.2012 в 08:08)   письмо автору
 
   для: man1   (19.03.2012 в 01:30)
 

понятия не имею как там на vk.com, но больше чем уверен лента там расположена в хронологическом порядке, и что за проблема отсортировать 4 выборки по дате добавления / изменения?

  Ответить  
 
 автор: man1   (19.03.2012 в 23:55)   письмо автору
 
   для: 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'ами ?

  Ответить  
 
 автор: Sfinks   (20.03.2012 в 10:55)   письмо автору
 
   для: 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;

как-то так.

  Ответить  
 
 автор: man1   (23.03.2012 в 06:01)   письмо автору
 
   для: Sfinks   (20.03.2012 в 10:55)
 

Спасибо за подсказку, хорошая идея. Так думаю и реализую.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования