За последние 24 часа нас посетили 22604 программиста и 1108 роботов. Сейчас ищут 593 программиста ...

Как объединить таблицы и стоит ли?

Тема в разделе "MySQL", создана пользователем SibBear, 4 апр 2020.

  1. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    Есть таблица db_seo
    id | parent_type | perent_id | seo_type | seo_value

    изначально в seo_type были все мета, title, h1, и прочее. И там же был hurl, что бы не плодить его в таблицах category, product, pages, news, materisls и тп.

    1 | catalog | 115 | hurl | nujniy-hurl
    2 | catalog | 115 | meta_title | The Best My Category
    3 | catalog | 115 | title | My Category
    4 | catalog | 118 | hurl | ne-nujniy-hurl

    Но. Для корректной работы парсера hurl'ов нужно сначала найти кому принадлежит введенный hurl в адресной строке, потом вытягивать все данные из остальных таблиц.
    То есть выбрать parent_id WHERE hurl, и затем выбирать все по parent_id из остальных таблиц

    Возникает проблема:
    выборка по hurl'у вытаскивает только одну строку, и теряются остальные seo поля.

    Или тогда приходится делать второй запрос отдельно вытаскивания остальных полей из seo.
    Или нужно делать вторую таблицу отдельно hurl'ов с теме же ключами что db_seo
    id | parent_type | perent_id | hurl

    что тоже мне не очень нравится...

    Подкиньте идею как одним запросом вытащить из таблицы seo по ключу
    WHERE tN.seo_value='nujniy_hurl'
    все строки с parent_id=115 ?
    плииз?

    или джоинами это не реально? я чето зарылся (((
     
  2. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    RIGHT JOIN все решает
    сначала LEFT'ом соединяем основную таблицу с db_seo AS t2 затем RIGHT'ом еще раз прицепляем db_seo AS t3
    тогда он по t2 выбирает WERE t2.seo_value='nujniy-hurl', а райт позволяет выбрать все остальные мета, итого N строк нужных, и parent_id найден.
    Ура

    "Семён семёныч" (с) ))))

    только теперь я не понимаю как програмно отличить один столбец seo_value из левой части от seo_value из правой части... Имя одно, ассоциация одна, а данные разные. Выборка идет по Select *, так как поля могут еще добавляться/удаляться, и переписывать все запросы в явное указание это завал...

    этот вопрос так же решен
    SELECT * , t3.seo_value AS meta_value .....


    И теперь главный вопрос. А стоило оно того?
    при количестве продуктов+каталогов+статей+новостей+еще что то там примерно в 400к записей, умножаем это на количество возможных мета полей, минимум 5, получаем 2 млн на старте.

    Не устанет база от цикличных запросов в том же каталоге продукта?
     
    #2 SibBear, 4 апр 2020
    Последнее редактирование: 4 апр 2020