Нужна помощь с моим запросом - PullRequest
0 голосов
/ 10 августа 2009

Извините за ужасный заголовок, не знаю, как это объяснить. У меня есть запрос, который выглядит так:

SELECT `name`, `latitude`, `longitude`, `indoor`, `address`,
    `phone`, `email`, `website`, `closed`
FROM rocks INNER JOIN 
    (SELECT DISTINCT id FROM rock_types WHERE type="DWS" or type="Top rope")
    AS types ON rocks.id=types.id
WHERE (latitude>-180 AND latitude<180) AND (longitude>-180 AND longitude<180)

В дополнение к тому, что я сейчас получаю, я хотел бы получить список типов, связанных с каждым идентификатором. Как я могу это сделать? Спасибо

Ответы [ 2 ]

1 голос
/ 10 августа 2009

Вот мой пример использования традиционного синтаксиса соединения:

SELECT rocks.name,
       rocks.latitude,
       rocks.longitude,
       rocks.indoor,
       rocks.address,
       rocks.phone,
       rocks.email,
       rocks.website,
       rocks.closed,
       rock_types.type

FROM   rocks,
       rock_types

WHERE  rocks.latitude  > -180                 AND
       rocks.latitude  < 180                  AND
       rocks.longitude > -180                 AND
       rocks.longitude < 180                  AND
       rocks.type_id   = rocks_types.id       AND
       rock_types.type IN ('DWS', 'Top rope')

rocks.id = rocks_types.id связывает обе таблицы.

Вот как вы можете написать один и тот же запрос, используя INNER JOIN (оба приводят к одному и тому же результату)

SELECT rocks.name,
       rocks.latitude,
       rocks.longitude,
       rocks.indoor,
       rocks.address,
       rocks.phone,
       rocks.email,
       rocks.website,
       rocks.closed,
       rock_types.type

FROM   rocks
       INNER JOIN rocks_types ON rocks.type_id = rocks_types.id

WHERE  rocks.latitude  > -180                 AND
       rocks.latitude  < 180                  AND
       rocks.longitude > -180                 AND
       rocks.longitude < 180                  AND
       rock_types.type IN ('DWS', 'Top rope')

РЕДАКТИРОВАТЬ : Исходя из вашего комментария, следующий список даст вам разделенный запятыми список типов:

SELECT rocks.name,
       rocks.latitude,
       rocks.longitude,
       rocks.indoor,
       rocks.address,
       rocks.phone,
       rocks.email,
       rocks.website,
       rocks.closed,
       (SELECT    GROUP_CONCAT(DISTINCT rock_types.type SEPARATOR ',')
        FROM      rock_types
        WHERE     rock_types.id = rocks.id                AND
                  rock_types.type IN ('DWS', 'Top rope')
        GROUP BY  rock_types.id
       ) AS type

FROM   rocks

WHERE  rocks.latitude  > -180    AND
       rocks.latitude  < 180     AND
       rocks.longitude > -180    AND
       rocks.longitude < 180
0 голосов
/ 10 августа 2009
SELECT `name`, `latitude`, `longitude`, `indoor`, `address`,
    `phone`, `email`, `website`, `closed`, 
    (SELECT GROUP_CONCAT(type SEPARATOR ',') FROM rock_types 
        WHERE (type="DWS" or type="Top rope") and  rock_types.id=rocks.id group by id) types
FROM rocks 
WHERE (latitude>-180 AND latitude<180) AND (longitude>-180 AND longitude<180)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...