Author |
Message |
dark-demon2
Guest
Карма: 388 поощрить/наказать
|
Posted: Tue Feb 06, 2007 5:20 pm (написано за 40 секунд)
Post subject: слияние таблиц с приоритетом левой
|
|
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: Николаев, Украина
|
Posted: Tue Feb 06, 2007 6:24 pm (спустя 1 час 4 минуты; написано за 4 минуты 8 секунд)
Post subject:
|
|
Какие именно поля затираются? Если Вы про `gall-id`, то необходимо явно указывать необходимые поля в SELECT(что не очень приятно при большом количестве выбираемых полей), либо использовать алиасы и использовать их в коде. То есть, либолибои использовать в коде поле gid
|
|
Back to top |
|
 |
Dark-Demon
Участник форума
Banned
Joined: 04 Feb 2007
Posts: 45
Карма: -3 поощрить/наказать
Location: spb
|
Posted: Wed Feb 07, 2007 12:20 am (спустя 5 часов 55 минут; написано за 52 секунды)
Post subject:
|
|
Владимир Хоменко, да хотелось бы без лишней писанины... это бага одного MySQL или со всем SQL так?
|
|
Back to top |
|
 |
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Wed Feb 07, 2007 12:27 am (спустя 6 минут; написано за 47 секунд)
Post subject:
|
|
А где баг-то? Это баги Вашего кода обработки результатов MySQL выборки.
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed Feb 07, 2007 1:08 pm (спустя 12 часов 41 минуту; написано за 23 секунды)
Post subject:
|
|
тогда уж это баг mysql_fetch_assoc...
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed Feb 07, 2007 1:09 pm (спустя 51 секунду; написано за 32 секунды)
Post subject:
|
|
а баг в том, что несуществующие строки из второй таблицы затирают поля первой.
|
|
Back to top |
|
 |
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Wed Feb 07, 2007 1:19 pm (спустя 9 минут; написано за 1 минуту 24 секунды)
Post subject:
|
|
Dark-Demon wrote: |
да хотелось бы без лишней писанины | Не вижу проблемы в том, чтобы написать as gid. Вам не кажется, что Вы пытаетесь собственную лень оправдать какими-то несуществующими багами MySQL и PHP?
|
|
Back to top |
|
 |
Dark-Demon
Участник форума
Banned
Joined: 04 Feb 2007
Posts: 45
Карма: -3 поощрить/наказать
Location: spb
|
Posted: Thu Feb 08, 2007 11:08 am (спустя 21 час 48 минут; написано за 2 минуты 33 секунды)
Post subject:
|
|
ну а теперь представь, что результат мы заносим в таблицу, где есть поле `gall-id`. тобишь INSERT SELECT уже не прокатывает.
|
|
Back to top |
|
 |
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Thu Feb 08, 2007 11:14 am (спустя 5 минут; написано за 3 минуты 7 секунд)
Post subject:
|
|
Dark-Demon wrote: |
тобишь INSERT SELECT уже не прокатывает. | C чего это вдруг? При INSERT SELECT названия полей вообще не имеют значения, так как вставляются соответствующие столбцы из результатов выборки. Учите матчасть, в конце концов!
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Feb 08, 2007 12:53 pm (спустя 1 час 39 минут; написано за 1 минуту 41 секунду)
Post subject:
|
|
мда... mysql.org/doc/refman/4.1/en/insert-select.html
названия полей очень даже имеют значение. если же ты инсертишь без указания имён полей, то как говорится ССЗБ, ибо можешь обрести впоследствии много гемороя.
|
|
Back to top |
|
 |
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Thu Feb 08, 2007 1:04 pm (спустя 10 минут; написано за 1 минуту 58 секунд)
Post subject:
|
|
Чтобы не быть голословным, приведите проблемный пример INSERT ... SELECT, где в SELECT используется LEFT JOIN, хорошо? Так сказать, контр-пример все моим аргументам. Я пока не вижу никаких проблем.
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Thu Feb 08, 2007 8:48 pm (спустя 7 часов 44 минуты; написано за 2 минуты)
Post subject:
|
|
 М |
| Пользователь Dark-Demon забанен за неоднократное нарушение Правил форума. |
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Feb 08, 2007 11:06 pm (спустя 2 часа 18 минут; написано за 17 секунд)
Post subject:
|
|
bæv, ну и какое правило я нарушил на сей раз?
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Thu Feb 08, 2007 11:32 pm (спустя 26 минут; написано за 2 минуты 24 секунды)
Post subject:
|
|
Dark-Demon wrote: |
а теперь представь | — это не смотря на замечания модераторов. А игнорирование замечаний — уже нарушение Правил.
|
|
Back to top |
|
 |
|