За последние 24 часа нас посетили 17562 программиста и 1722 робота. Сейчас ищут 928 программистов ...

Выборка из 3 таблиц

Тема в разделе "MySQL", создана пользователем ctekjlo, 20 авг 2009.

  1. ctekjlo

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

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    есть 3 таблицы
    dogs
    | id | name |

    cats
    | id | name |

    event
    | id | cats_or_dog_id | event |

    Нужно выбрать все события где event.cats_or_dog_id = ( dogs.id OR cats.id )

    Mysql 4.1.8
     
  2. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    а что делать, если dogs.id и cat.id совпадает? Подозреваю, что у вас это — невозможно.
    А если у вас такая структура, то должно было бы быть что-то типа такого:

    Pets
    | ID | Name | Type |

    Events
    | ID | PetID | Event |

    И тогда очень легко все зацепить:

    [sql]SELECT * FROM `Events` INNER JOIN `Pets` ON `Pets`.`ID` = `Events`.`PetID`[/sql]
    хотя и сейчас можно сделать два джоина
     
  3. ctekjlo

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

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    Как я понял в один запрос это не реально?

    нет они не совпадают id все разные

    Нужно что-то типа этого носам не допру как это сделать :oops:
    PHP:
    1. SELECT
    2.     event.id
    3. FROM
    4.     event,
    5.     dogs,
    6.     cats    
    7. WHERE
    8.     event.id = ( ( SELECT dogs.id FROM dogs ) or  ( SELECT cats.id FROM cats ) );
     
  4. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    по-моему как-то так можно:
    [sql]SELECT * FROM event, dogs, cats WHERE event.id = dogs.id OR event.id = cats.id[/sql]
    или одним запросом два запроса через UNION
     
  5. ctekjlo

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

    С нами с:
    20 июн 2009
    Сообщения:
    57
    Симпатии:
    0
    проблема была в скобках
    SELECT * FROM event, dogs, cats WHERE (event.id = dogs.id OR event.id = cats.id)

    я к такому варианту тоже пришел но так как у меня были еще и AND запрос не работал