SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.04.2015 01:36:37

sidor84
Участник
Зарегистрирован: 02.04.2015
Сообщений: 6

Как объединить в два запроса БД в одном цикле?

Как объединить в два запроса БД в одном цикле?

честно говоря, не знаю правильно ли задал вопрос, но суть его такова:


Таблица user_messages
В этой табл. данные о сообщениях пользователей



id_ai
id_objav
poluchatel_id
otpravitel_id
message
date

 


Таблица objavleniya
В ней данные о товаре


id
title
description

 


Вот цель вопроса:
нужно из таблицы objavleniya наименование товара (title) вывести в цикле, но подставляя id этого товара к id_objav таблицы user_messages

это запрос user_messages

$result = mysql_query ("(
select * FROM `user_messages`
WHERE id_ai IN
    (select max(id_ai) as id_ai from
        (SELECT id_ai, otpravitel_id, poluchatel_id FROM `user_messages` WHERE otpravitel_id = '$get_id'
            union all
    SELECT id_ai, poluchatel_id, otpravitel_id FROM `user_messages` WHERE poluchatel_id = '$get_id') t
    group by otpravitel_id, poluchatel_id )
ORDER BY id_ai DESC)"
,$db);

$myrow = mysql_fetch_assoc($result);
 


вывожу в цикле (do {printf  ...  } while ($myrow = mysql_fetch_assoc($result)) ), данные этой таблицы.

id_ai - 1
id_objav - 1255
poluchatel_id - 25
otpravitel_id - 38
message - текст сообщения
date - дата

Вот на место "1255" надо подставить title из другой таблицы

как правильно подобные вопросы решаются. толи в цикле все выводить, толи как то подставлять (заменять) данные при выводе... ну типа если id 1255 пиши "наименование товара".

Спасибо

Неактивен

 

#2 03.04.2015 07:51:43

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить в два запроса БД в одном цикле?

SELECT
id_ai,
title,
poluchatel_id,
otpravitel_id,
message,
`date`
FROM user_messages JOIN objavleniya ON id=id_objav;


Посмотрите http://sqlinfo.ru/forum/viewtopic.php?id=3210

Неактивен

 

#3 03.04.2015 11:09:35

sidor84
Участник
Зарегистрирован: 02.04.2015
Сообщений: 6

Re: Как объединить в два запроса БД в одном цикле?

Похоже не совсем то что нужно... ну или не разобрался.
Запросом к user_messages я получаю массив:
Array
(
    [id_ai] => 26
    [id_objav] => 234
    [poluchatel_id] => 5
    [otpravitel_id] => 40
    [poluchatel_e_mail] => 111@mail.ru
    [otpravitel_e_mail] => 222@mail.ru
    [message] => текст
    [date] => 2015-04-02 23:44:31
    [readed] => 0
)
потом этот массив в цикле выводится. т.е при выводе данные разные
вот строка id_objav = 234
далее  id_objav = 248
и т.д. пока не окончен цикл

в таблице objavleniya
есть id 234 его title = "товар 1"
id 248 его title = "товар 22"

вот по итогу нужно получить массив

Array
(
    [id_ai] => 26
    [id_objav] => 234

    [title] => товар 1       -т.е с учетом что id_objav в данном круге цикла = 234, подвязываем title из другой табл.

    [poluchatel_id] => 5
    [otpravitel_id] => 40
    [poluchatel_e_mail] => 111@mail.ru
    [otpravitel_e_mail] => 222@mail.ru
    [message] => текст
    [date] => 2015-04-02 23:44:31
    [readed] => 0
)

Неактивен

 

#4 03.04.2015 13:18:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить в два запроса БД в одном цикле?

Именно, то что нужно.

SELECT <список полей>
FROM (select <список полей> FROM `user_messages`
 WHERE id_ai IN
     (select max(id_ai) as id_ai from
         (SELECT id_ai, otpravitel_id, poluchatel_id FROM `user_messages` WHERE otpravitel_id = '$get_id'
             union all
     SELECT id_ai, poluchatel_id, otpravitel_id FROM `user_messages` WHERE poluchatel_id = '$get_id') t
     group by otpravitel_id, poluchatel_id )
 ) t
JOIN objavleniya ON id=t.id_objav
ORDER BY id_ai DESC;

 

Неактивен

 

#5 03.04.2015 23:50:55

sidor84
Участник
Зарегистрирован: 02.04.2015
Сообщений: 6

Re: Как объединить в два запроса БД в одном цикле?

vasya, спасибо огромное. реально помогли.
Я на трех форумах с этим вопросом, везде умничают, а толком помочь не могут.
А у Вас четко быстро... и реально качественно)

еще доп.вопрос появился:

JOIN objavleniya_chastn ON id=t.id_objav

это строка как раз меняет(или подставляет) мой title к id

А можно ли к ней дописать еще одну замену? (как пример напишу, чтоб вопрос понятен был
JOIN objavleniya ON id=t.id_objav AND user_name=t.otpravitel_id
)

Интересует вот этот код ... AND user_name=t.otpravitel_id как его правильно дописать
а то так как я написал, это неправильно)

Отредактированно sidor84 (03.04.2015 23:51:46)

Неактивен

 

#6 04.04.2015 00:59:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить в два запроса БД в одном цикле?

sidor84 написал:

еще доп.вопрос появился:

JOIN objavleniya_chastn ON id=t.id_objav

это строка как раз меняет(или подставляет) мой title к id

нет, эта строка - условие связи между таблицами (в качестве одной из таблиц t выступает подзапрос, который ваш исходный запрос).

Замены никакой вообще не происходит, список нужных полей вы указываете после слова select.
Условие связи может состоять из нескольких условий, т.е. запись
JOIN objavleniya ON id=t.id_objav AND user_name=t.otpravitel_id
вполне валидна. Нужно ли вам именно это, не могу сказать, так как не знаю задачи.

Для лучшего понимая join посмотрите на разницу в результатах:

select * from user_messages, objavleniya;
select * from user_messages t1 join objavleniya t2 on t1.id_objav=t2.id;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson