Автор Тема: MySql Query с parent_id  (Прочитано 7133 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
MySql Query с parent_id
« : 30 Октября 2007, 06:51:35 »
Здравствуйте.

Не могу написать один запрос и решил наконец спросить у вас.

Таблица:

-------------------------------------------------------------------
| ID | PARENT_ID | FLAG |
| 1        |    0    |    0    |
| 2 | 1 | 0 |
| 3 | 1 | cat |
| 4 | 0 | 0 |
| 5 | 0 | 0 |
| 6 | 5 | 0 |
| 7 | 0 | cat |
-------------------------------------------------------------------

Задача: Надо выбрать все записи в которых parent record (parent_id=0) и все соответстующие ему child records имееют flag != "cat"

Тоесть в данном примере в результате будет получено только три записи с ID: 4,5,6.

Большое спасибо за любые идеи.
Life is Good

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySql Query с parent_id
« Ответ #1 : 30 Октября 2007, 09:17:43 »
и как это будет получена запись №6...в ней парент ид = 5

стандартными средствами не реализуешь такого рода запрос...если я тебя правильно понял.......Должны искаться Parent_id=0 потом искаться зависимые от низ записи и просматриваться значение flag....mysql такого не могёт

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
MySql Query с parent_id
« Ответ #2 : 30 Октября 2007, 16:34:16 »
DartSidius
record # 6 будет выбран с БД потому что он (child) и record # 5 (его parent) имеют FLAG != \'cat\'

Должен быть выход.
Life is Good

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
MySql Query с parent_id
« Ответ #3 : 31 Октября 2007, 11:43:06 »
3 уточнение:
1) насколько большая база данных?
2) возможна вложенность child в child ?
3) возможен запрос имет 2 подзапроса, но только 2 даст ответ, тоесть 1 создает временную таблицу?

если есть вложенность child в child то до какого уровня? так как если неопределенного уровня то базы данных не умеют работать рекурсивно.
« Последнее редактирование: 31 Октября 2007, 12:10:15 от Altaxar »
Не все является тем чем кажется.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
MySql Query с parent_id
« Ответ #4 : 31 Октября 2007, 12:47:14 »
Вот составил запрос, только ногами не бить :-)
select c1.id from aaa p1 left Join aaa c1 on c1.parent_id=p1.id or c1.id=p1.id where  p1.parent_id=0 AND p1.flag!="cat" AND (select 1 from aaa where parent_id=p1.id AND flag="cat" limit 1) is null
« Последнее редактирование: 31 Октября 2007, 13:16:22 от Altaxar »
Не все является тем чем кажется.

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
MySql Query с parent_id
« Ответ #5 : 01 Ноября 2007, 00:12:22 »
Altaxar
Должен тебе сказать большое спасибо ;). Query работает.

Только один вопрос на счет структуры таблицы. На сколько я видел, во многих applications в случае когда используются parent и child records - как правило используют две таблицы (где в одной все parent, а в другой все child соответственно). По такой системе сделаны напр. форумы.

В таблице пока не более 3000 записей и в принцыпе можно переписать скрипты..

Ваши соображения.
Life is Good

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
MySql Query с parent_id
« Ответ #6 : 01 Ноября 2007, 14:11:28 »
для удобства можно разбить, даже желательно, это нормальный тон для организации таблиц. причем в моем запросе можно будет 1 условие убрать p1.parent_id=0. и вообще чаще всего данные у parent и child разные. Но надо будет задуматься о id parent i child, данный запрос выводит id того и другого. а при разделении будет все подругому.

Но если как я уже писал, что child может быть parent\'ом для другого child ,бывает и такая структура, то сдесь естественно одна таблица.(и мой запрос тут бесилен)

Мой запрос для твоей задачи оптимален, как мне сказали.

P.S. переписывать желательно через алгоритм :).
« Последнее редактирование: 01 Ноября 2007, 14:33:41 от Altaxar »
Не все является тем чем кажется.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28