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

Форум MySQL

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

 

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

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

тема: Поочередная выборка из двух таблиц
 
 автор: userfor   (16.08.2012 в 07:30)   письмо автору
 
 

Есть две таблицы, одна с записями фотосодержания table_photo, а другая с записями видеосодержания table_video.
Нужно выводить последние записи из table_photo и table_video по очередно.
То есть на странице All будет смесь последнего видео и фото контента.

Как сделать один запрос, чтобы получить корректные массивы, например так:

Array
(
    [0] => Array // последняя запись из таблицы table_photo
        (
            [id_photo] => 18
            [content] => ifmpv3Ha.jpg
        )

    [1] => Array // последняя запись из таблицы table_video
        (
            [id_video] => 5
            [content_video] => Mqwdila8.mp4
        )

    [2] => Array // ПРЕДпоследняя запись из таблицы table_photo
        (
            [id_photo] => 16
            [content] => 0d0J9piP.jpg
        )

    [3] => Array // ПРЕДпоследняя запись из таблицы table_video
        (
            [id_video] => 2
            [content_video] => 2eaJFFqE.mp4
        )
    ...
)

Примечание: количество записей из таблицы table_photo не обязательно должно соответствовать количеству записей из таблицы table_video

  Ответить  
 
 автор: confirm   (16.08.2012 в 14:47)   письмо автору
 
   для: userfor   (16.08.2012 в 07:30)
 

Почему именно так, разве есть проблемы из такого:
[0] => Array
        ( 
            [id_photo] => 18 
            [content] => ifmpv3Ha.jpg 
            [id_video] => 5 
            [content_video] => Mqwdila8.mp4 
        ) 

    [1] => Array
        ( 
            [id_photo] => 16 
            [content] => 0d0J9piP.jpg 
            [id_video] => 2 
            [content_video] => 2eaJFFqE.mp4 
        )
получить в итоге тоже самое, что нужно?

  Ответить  
 
 автор: userfor   (17.08.2012 в 10:46)   письмо автору
 
   для: confirm   (16.08.2012 в 14:47)
 

Нужно явно определить к чему относится массив к фото-галере или видео-галерее. Непонятно тогда, что выводить контент видео или фото в цикле (чередование у них не через одного может быть)?
Или чего то не понял?

  Ответить  
 
 автор: Valick   (17.08.2012 в 10:48)   письмо автору
 
   для: userfor   (17.08.2012 в 10:46)
 

чередование у них не через одного может быть
тогда распишите алгоритм чередования

  Ответить  
 
 автор: userfor   (17.08.2012 в 11:08)   письмо автору
 
   для: Valick   (17.08.2012 в 10:48)
 

Предположим в таблице table_photo 4 записи
а в таблице table_video 1 запись

получаем последнюю запись из table_photo
затем
получаем последнюю запись из table_video
затем
получаем предпоследнюю запись из table_photo
затем
получаем предпоследнюю запись из table_video - УПС, а тут не ту записи, тогда пропускаем
идем теперь за остальными записями из table_photo

  Ответить  
 
 автор: Valick   (17.08.2012 в 11:17)   письмо автору
 
   для: userfor   (17.08.2012 в 11:08)
 

покажите структуру таблиц

  Ответить  
 
 автор: confirm   (17.08.2012 в 10:58)   письмо автору
 
   для: userfor   (17.08.2012 в 10:46)
 

А ключи массива для чего?

  Ответить  
 
 автор: userfor   (17.08.2012 в 11:11)   письмо автору
 
   для: confirm   (17.08.2012 в 10:58)
 

Я не знаю, как определить к чему относится данный массив? К видео или фото галерее?

     [1] => Array
        ( 
            [id_photo] => 16 
            [content] => 0d0J9piP.jpg 
            [id_video] => 2 
            [content_video] => 2eaJFFqE.mp4 
        )

Подскажите...

  Ответить  
 
 автор: confirm   (17.08.2012 в 11:14)   письмо автору
 
   для: userfor   (17.08.2012 в 11:11)
 

Вам что после выборки из таблицы нужно передать два массива двум разным получателям? Или вам надо разложить это с чередованием строк фото/видео?
Словами напишите, что в итоге хотите получить.

  Ответить  
 
 автор: userfor   (17.08.2012 в 11:26)   письмо автору
 
   для: confirm   (17.08.2012 в 11:14)
 

Предположим в таблице table_photo 4 записи
а в таблице table_video 1 запись

получаем последнюю запись (он же массив[0] для цикла foreach) из table_photo
затем
получаем последнюю запись (он же массив[1] для цикла foreach) из table_video
затем
получаем предпоследнюю запись из table_photo
затем
получаем предпоследнюю запись из table_video - УПС, а тут не ту записи, тогда пропускаем
идем теперь за остальными записями из table_photo 

  Ответить  
 
 автор: confirm   (17.08.2012 в 11:30)   письмо автору
 
   для: userfor   (17.08.2012 в 11:26)
 

а) массив можно разбить как вам будет угодно - array_chunk()
б) в цикле, опираясь на ключи массива, можно раскидать его значения как вам вздумается.
Выбирайте.

  Ответить  
 
 автор: userfor   (17.08.2012 в 12:00)   письмо автору
 
   для: confirm   (17.08.2012 в 11:30)
 

В общем сейчас делаю два запроса, потом объединяю массивы, потом сортирую... = геморой.
Можно делать один запрос, получать смешанные массивы, потом их делить, разбирать... = геморой.

Вернемся к началу:
Как сделать один запрос, чтобы получить сразу корректные массивы?

  Ответить  
 
 автор: confirm   (17.08.2012 в 12:19)   письмо автору
 
   для: userfor   (17.08.2012 в 12:00)
 

Ну чушь какая-то, ей богу.
Надо полагать, что картинки и видео, это данные принадлежащие каждой записи?
Вы получаете выборку отсортированную вашим требованиям - это сделать невозможно, или все-таки можно?
Так какая проблема тогда?

Давайте так - меньше слов, и короткий прием конечного htnk-кода с этими данными.

  Ответить  
 
 автор: Valick   (17.08.2012 в 12:36)   письмо автору
 
   для: userfor   (17.08.2012 в 12:00)
 

я вас просил показать структуру таблиц
мне нужны имена полей и их типы

  Ответить  
 
 автор: userfor   (17.08.2012 в 14:44)   письмо автору
8.6 Кб
 
   для: Valick   (17.08.2012 в 12:36)
 

Упустил ваше сообщение.
Связи пока указывать не стал.

  Ответить  
 
 автор: userfor   (17.08.2012 в 14:45)   письмо автору
9.9 Кб
 
   для: Valick   (17.08.2012 в 12:36)
 

У таблицы видео структура.

  Ответить  
 
 автор: Valick   (17.08.2012 в 15:33)   письмо автору
 
   для: userfor   (17.08.2012 в 14:45)
 

в результате вам нужны все поля из обоих таблиц? или точно так как в первом посте?

  Ответить  
 
 автор: userfor   (17.08.2012 в 15:44)   письмо автору
 
   для: Valick   (17.08.2012 в 15:33)
 

Ну да поля нужны все.
Фишка еще в том, что нужно извлекать не все записи сразу, чтобы делать постраничную навигацию.
Может это лучше с помощью процедур как-то делать?

  Ответить  
 
 автор: Valick   (17.08.2012 в 15:58)   письмо автору
 
   для: userfor   (17.08.2012 в 15:44)
 


<?php
include('connect.php');
mysql_query("SET @f:=-1;");
mysql_query("SET @v:=0;");
$query="(SELECT @f:=@f+2 AS c, 
                'photo' AS name, 
                p.id_gal_photo AS id,
                p.img_gal_photo AS content
            FROM photo AS p
            ORDER BY p.id_gal_photo)
        UNION ALL
        (SELECT @v:=@v+2 AS c, 
                'video' AS name, 
                v.id_gal_video AS id,
                v.img_gal_video AS content
            FROM video AS v
            ORDER BY v.id_gal_video)
        ORDER BY c DESC
        LIMIT 10;"
;
$res=mysql_query($query) or die(mysql_error());
while(
$mass=mysql_fetch_assoc($res)){
echo 
"<PRE>"print_r($mass); echo "</PRE>";
}
?>

пробуйте, нужные поля добавите по аналогии, главное чтобы алиасы совпадали
и по хорошему не надо загонять (загоняться) все в массив, зачем лишние телодвижения, все можно выводить сразу
while($mass=mysql_fetch_assoc($res)){
if($mass[name]=='photo') {echo "Это фотография: ".$mass[content]."<br />";}
if($mass[name]=='video') {echo "Это видеофайл: ".$mass[content]."<br />";}
}

__
будем считать, что про процедуры я ничего не слышал :)

  Ответить  
 
 автор: userfor   (18.08.2012 в 06:28)   письмо автору
 
   для: Valick   (17.08.2012 в 15:58)
 

О_о!
Мне бы научится писать такие запросы.
Благодарю друг!

  Ответить  
 
 автор: Valick   (18.08.2012 в 09:10)   письмо автору
 
   для: userfor   (18.08.2012 в 06:28)
 

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

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 13:55)   письмо автору
 
   для: Valick   (18.08.2012 в 09:10)
 

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

Вам, кстати, если имеется некоторое свободное время, тоже рекомендую ознакомиться с сайтом из поста ниже. Я тоже, до того как туда попал думал что знаю SQL :-D)))

  Ответить  
 
 автор: Valick   (18.08.2012 в 14:02)   письмо автору
 
   для: Sfinks   (18.08.2012 в 13:55)
 

теория - практика = отсутсвие кода
практика - теория = говносайт
теория + практика = отличные сайты
каждый выбирает по себе...
___
лично у меня кроме этого форума практики нет, всему что я знаю я научился из книг

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 14:29)   письмо автору
 
   для: Valick   (18.08.2012 в 14:02)
 

Я ни в коем случае не утверждаю, что не нужно читать книги. Нужно и обязательно! Только книги должны быть проверенными - это раз и могут возникать форс-мажорные обстоятельства - это 2! Я например заказал на озоне книгу "SQL для профессионалов", написанную одним из авторов стандарта SQL - Джо Селко, еще 25го июНя и у меня ее до сих пор нет! Не буду описывать как и в чем они лажают, но факт остается фактом - книгу я еще не видел! А сайт - он вот он =)

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 13:50)   письмо автору
 
   для: userfor   (18.08.2012 в 06:28)
 

Если реально хотите научиться, а не на словах, то идите сюда: http://sql-ex.ru
Решайте задачи, начиная с обучающего этапа, читайте справку, рекомендации, а главное форум по задачам.
Если есть терпение - научитесь не только такие решать, но и раз в 50 посложнее!
____________
Модератор, не удаляй, плиз. Это не коммерческая реклама. Это я всем рекомендую! =)

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

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