SQL: за пределами INNER JOIN (из-за отсутствия лучшего заголовка) - PullRequest
1 голос
/ 08 апреля 2011

Окружающая среда:
- PHP 5.3.5
- база данных Oracle 11g

Название таблицы: tips_categories

id   category   picture  
1    a          e.jpg  
2    b        f.jpg  
3    c        g.jpg  

Название таблицы: советы

id   tips_categories_id   tip
1    3                       This is a tip.
2    2                       This is another tip.
3    1                       This is yet another tip.

Желаемый результат:

$array_name['tips']
    [0]
        category => a
        picture => e.jpg
        tips
            [0] => This is yet another tip.
    [1]
        category => b
        picture => f.jpg
        tips
            [0] => This is another tip.
    [2]
        category => c
        picture => g.jpg
        tips
            [0] => This is a tip.

Написание одного запроса, который возвращает желаемое повторное построение, выходит за рамки моих текущих знаний SQL. ВНУТРЕННЕЕ СОЕДИНЕНИЕ не возвращает желаемый результат. Если это не может быть сделано в одном запросе, Я предполагаю, что следующие два запроса должны будут использоваться вместо:

ВЫБЕРИТЕ id, категорию, изображение ИЗ tips_categories
ВЫБРАТЬ подсказку ОТ подсказок ГДЕ tips_categories_id = id

Буду очень признателен за предложения о том, как написать этот запрос в одном утверждении. Спасибо: -)

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Ну вот:

SELECT c.id, c.category, c.picture, t.tip
FROM tips_categories AS c
INNER JOIN tips AS t
    ON t.tips_categories_id = c.id

Конечно, возвращает нужные данные, но tip будет просто 4-м столбцом, а не какой-то иерархией.

Что вы используете для построениямассив (ы) из результатов?

3 голосов
/ 08 апреля 2011

Запросы не возвращают иерархические наборы результатов. Поэтому то, что вы пытаетесь сделать, невозможно.

Вы можете написать простой запрос внутреннего соединения, упорядочить по id, а затем создать свой собственный массив, повторяющийся над набором результатов и добавляя новую запись в массив каждый раз, когда id изменяется.

Запрос:

SELECT tips.id,category,picture, tip
  FROM tips_categories
 INNER JOIN tips on (tips_categories_id = id)
 ORDER BY tips.ip

Итак, ваш набор результатов будет примерно таким:

 id   category   picture  tip
 1    a          e.jpg    This is yet another tip A01.
 1    a          e.jpg    This is yet another tip A02.
 1    a          e.jpg    This is yet another tip A03.
 2    b          f.jpg    This is another tip B01.
 2    b          f.jpg    This is another tip B02.
 3    c          g.jpg    This is a tip C01.

При условии, что в вашей таблице tips больше записей.

Вы выполняете итерацию с помощью PHP и получаете желаемый результат для вашего массива. Это должно быть довольно просто и понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...