SQL возвращает несколько одинаковых записей при использовании INNER JOIN - PullRequest
0 голосов
/ 01 мая 2018

У меня следующий запрос SQL, который я пытаюсь выполнить:

"SELECT Main.id, Main.created_min, Main.local_photo_name, Main.description, Main.creator, Main.title, Main.museum, technique.technique 
            FROM Main 
            INNER JOIN technique ON technique.kleding_id=Main.id 
            LIMIT 5"

Я хочу, чтобы этот запрос добавил данные из таблицы методов в мои результаты, полученные из основной таблицы. Это работает, но когда у меня есть несколько методов, связанных с одним и тем же идентификатором из основной таблицы, я хочу, чтобы они были добавлены в массив к основной записи.

Возможно ли это с SQL?
Вот что получилось:

[16] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => kant
    )

[17] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => satijn
    )

и я хочу кое-что по пути этого:

[16] => Array
    (
        [id] => 47
        [created_min] => 1890
        [local_photo_name] => 
        [description] => Volgens kerkelijk gebruik werden baby's gedoopt in witte gewaden, als teken van onschuld en zuiverheid. Deze doopkleding kon men doorgaans meerdere malen gebruiken en overdragen op volgende generaties. In de 19de eeuw was het doopfeest een belangrijke gebeurtenis. Vele doopgewaden zijn dan ook gemaakt van kostbare materialen en rijkelijk gedecoreerd.
        [creator] => Anoniem
        [title] => Ecrukleurige doopmantel met cape in satijn en kant.
        [museum] => Modemuseum Hasselt
        [technique] => Array
            (
            [technique] => kant
            [technique] => satijn
            )
    )

таблицы выглядят так:
Просто отметим, что таблицы содержат около 200 тысяч записей каждая. Так что скорость - это ключ. enter image description here enter image description here

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы можете сделать что-то вроде этого:

SELECT Main.id,
       Main.created_min,
       Main.local_photo_name,
       Main.description,
       Main.creator,
       Main.title,
       Main.museum,
       JSON_ARRAYAGG(technique.technique) AS techniques
FROM Main
INNER JOIN technique ON technique.kleding_id = Main.id
GROUP BY Main.id
LIMIT 5

Это вернет массив методов JSON. Вот документация JSON_ARRAYAGG

0 голосов
/ 01 мая 2018

использовать group by с id и попробовать, может быть, это работает

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