Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

слияние таблиц с приоритетом левой (dark-demon2)
Author Message
dark-demon2
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Feb 06, 2007 5:20 pm (написано за 40 секунд)
   Post subject: слияние таблиц с приоритетом левой
Reply with quote

MySQL

далаю такой запрос:
Code (SQL): скопировать код в буфер обмена
SELECT * , count( `photo-id` ) AS `numb` , sum( `photo`.`photo-views` ) AS `views`
FROM `d-gallery` AS `gall`
LEFT JOIN `d-photos` AS `photo`
USING ( `gall-id` )
GROUP BY `gall`.`gall-id`
проблема в том, что если для таблицы `gall` нет ни одной соответствующей записи из `photo`, то результат будет плачевным:
Code (any language): скопировать код в буфер обмена
    * [gall-id]is NULL
    * [gall-title]= ewf
    * [gall-descr]= ewffdf
    * [gall-class]= 0
    * [gall-thumb]is empty string
    * [photo-id]is NULL
    * [photo-title]is NULL
    * [photo-descr]is NULL
    * [photo-views]is NULL
    * [photo-fname]is NULL
    * [numb]= 0
    * [views]is NULL
очевидно, в этом случае строка из правой таблицы, состоящая из одних NULL затирает данные из левой.
внимание вопрос - как сделать, чтобы этого не происходило?
Back to top
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Tue Feb 06, 2007 6:24 pm (спустя 1 час 4 минуты; написано за 4 минуты 8 секунд)
   Post subject:
Reply with quote

Какие именно поля затираются? Если Вы про `gall-id`, то необходимо явно указывать необходимые поля в SELECT(что не очень приятно при большом количестве выбираемых полей), либо использовать алиасы и использовать их в коде.

То есть, либо
Code (SQL): скопировать код в буфер обмена
SELECT `gall`.`gall-id`, `gall`.`gall-title`, `gall`.`gall-descr`, ...
либо
Code (SQL): скопировать код в буфер обмена
SELECT `gall`.`gall-id` AS gid ...
и использовать в коде поле gid
Back to top
View user's profile Send private message Send e-mail
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Wed Feb 07, 2007 12:20 am (спустя 5 часов 55 минут; написано за 52 секунды)
   Post subject:
Reply with quote

Владимир Хоменко, да хотелось бы без лишней писанины... это бага одного MySQL или со всем SQL так?
Back to top
View user's profile Send private message
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Wed Feb 07, 2007 12:27 am (спустя 6 минут; написано за 47 секунд)
   Post subject:
Reply with quote

А где баг-то? Это баги Вашего кода обработки результатов MySQL выборки.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 07, 2007 1:08 pm (спустя 12 часов 41 минуту; написано за 23 секунды)
   Post subject:
Reply with quote

тогда уж это баг mysql_fetch_assoc...
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 07, 2007 1:09 pm (спустя 51 секунду; написано за 32 секунды)
   Post subject:
Reply with quote

а баг в том, что несуществующие строки из второй таблицы затирают поля первой.
Back to top
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Wed Feb 07, 2007 1:19 pm (спустя 9 минут; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Dark-Demon wrote:
да хотелось бы без лишней писанины
Не вижу проблемы в том, чтобы написать as gid.

Вам не кажется, что Вы пытаетесь собственную лень оправдать какими-то несуществующими багами MySQL и PHP?
Back to top
View user's profile Send private message Send e-mail
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Thu Feb 08, 2007 11:08 am (спустя 21 час 48 минут; написано за 2 минуты 33 секунды)
   Post subject:
Reply with quote

ну а теперь представь, что результат мы заносим в таблицу, где есть поле `gall-id`. тобишь INSERT SELECT уже не прокатывает.
Back to top
View user's profile Send private message
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Thu Feb 08, 2007 11:14 am (спустя 5 минут; написано за 3 минуты 7 секунд)
   Post subject:
Reply with quote

Dark-Demon wrote:
тобишь INSERT SELECT уже не прокатывает.
C чего это вдруг? При INSERT SELECT названия полей вообще не имеют значения, так как вставляются соответствующие столбцы из результатов выборки.

Учите матчасть, в конце концов!
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Thu Feb 08, 2007 12:53 pm (спустя 1 час 39 минут; написано за 1 минуту 41 секунду)
   Post subject:
Reply with quote

мда... mysql.org/doc/refman/4.1/en/insert-select.html
названия полей очень даже имеют значение. если же ты инсертишь без указания имён полей, то как говорится ССЗБ, ибо можешь обрести впоследствии много гемороя.
Back to top
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Thu Feb 08, 2007 1:04 pm (спустя 10 минут; написано за 1 минуту 58 секунд)
   Post subject:
Reply with quote

Чтобы не быть голословным, приведите проблемный пример INSERT ... SELECT, где в SELECT используется LEFT JOIN, хорошо?

Так сказать, контр-пример все моим аргументам.

Я пока не вижу никаких проблем.
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Thu Feb 08, 2007 8:48 pm (спустя 7 часов 44 минуты; написано за 2 минуты)
   Post subject:
Reply with quote


М

Пользователь Dark-Demon забанен за неоднократное нарушение Правил форума.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Thu Feb 08, 2007 11:06 pm (спустя 2 часа 18 минут; написано за 17 секунд)
   Post subject:
Reply with quote

bæv, ну и какое правило я нарушил на сей раз?
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Thu Feb 08, 2007 11:32 pm (спустя 26 минут; написано за 2 минуты 24 секунды)
   Post subject:
Reply with quote

Dark-Demon wrote:
а теперь представь
— это не смотря на замечания модераторов.
А игнорирование замечаний — уже нарушение Правил.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML