За последние 24 часа нас посетили 22782 программиста и 1224 робота. Сейчас ищут 684 программиста ...

Помогите составить SQL подзапрос

Тема в разделе "PHP для новичков", создана пользователем Nubcoder32, 1 авг 2021.

  1. Nubcoder32

    Nubcoder32 Новичок

    С нами с:
    23 мар 2021
    Сообщения:
    27
    Симпатии:
    0
    Добрый день уважаемые форумчане. Прошу помощи в составлении подзапроса mySql
    Код (Text):
    1.  
    2. (SELECT  GROUP_CONCAT(tags.name) FROM tag_product, tags WHERE tag_product.product_id = product.id AND tags.id = tag_product.tag_id) AS tags';
    Возвращает
    Код (Text):
    1.  
    2. [tags] => 'tag 1, tag2' ...
    Нужно что бы возвращал
    Код (Text):
    1.  
    2. [tags] => [
    3.      [0] => 'tag 1',
    4.      [1] => 'tag 2',
    5.      ....
    6. ]
     
  2. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    MySQL такого не может.
    Если версия выше 5,7 то обратите внимание на json функции MySQL
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    + помните об ограничении в длину агрегируемого поля tag_product в 1024 символа (можно настройками MySQL увеличить максимум до 4096)
    если тегов будет много .. в очень неприятную ситуацию можете попасть
     
  4. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Обрежет лишнее просто.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    просто если ты рассчитываешь на один результат, а тебе "лишнее просто обрежет" - весь моск сломаешь, почему не все результаты
     
  6. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Это да.
     
  7. Nubcoder32

    Nubcoder32 Новичок

    С нами с:
    23 мар 2021
    Сообщения:
    27
    Симпатии:
    0
    Блин это что ж теперь из цикла запросы слать, или лучше explode что бы бд не дергать?
     
  8. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Не группируйте.
    Если сразу выводите на страницу, то сортируйте силами MySQL Можно по двум и более колонкам.
    Если же в массив, то посортировать можно и с PHP
     
  9. musicman3

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

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    $exec->fetchAll(\PDO :: FETCH_ASSOC)) юзайте и будет счастье. Будет именованный массив на выходе.
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Это подходящий случай для сознательной денормализации. В базе StackOverflow теги хранятся в вопросах в текстовом поле. Поэтому при выводе поста нет необходимости делать джойн и группировку. Такой механизм НЕ заменяет отношение многие ко многим, а только оптимизирует самые частые запросы.