За последние 24 часа нас посетили 10160 программистов и 680 роботов. Сейчас ищет 381 программист ...

Как выбрать все записи без дочерних записей?

Тема в разделе "MySQL", создана пользователем S.t.A.M., 7 окт 2009.

  1. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Стандартная иерархия, поля:
    id, parent_id,order,title, ...

    $parent - текущий ключ

    обычная выборка:
    SELECT id,title
    FROM data_keys
    WHERE parent_id = $parent
    LIMIT 200


    Как выбрать все записи без потомков?
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Можно в лоб.

    [sql]SELECT * FROM table WHERE parent NOT IN (SELECT id FROM table)[/sql]

    Можно немного пошаманить с джойном.
     
  3. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Хочется как раз с джойном... )))
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А смысл?
    Насколько мне помнится оно будет не быстрее.
     
  5. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Опять? ))
    LEFT JOIN table p ON p2.id=table.parentid
    where p2.id is null
     
  6. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Что то я даже с этой конструкцией не могу разобраться...
    написал так:
    $q= "
    SELECT a.id,a.title
    FROM data_keys as a
    WHERE a.parent_documents_id = $parent
    AND a.id NOT IN (SELECT b.id FROM data_keys as b WHERE b.parent_documents_id = a.id)
    LIMIT 200
    ";
    $category = sql($q);

    Но так не работает (((
     
  7. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    А! Все заработало это я перегрелся видимо )))

    SELECT id,title
    FROM data_keys
    WHERE parent_documents_id = $parent
    AND id NOT IN (SELECT parent_documents_id FROM data_keys)
    LIMIT 200