За последние 24 часа нас посетили 17234 программиста и 1303 робота. Сейчас ищут 1704 программиста ...

Запрос к двум таблицам (родитель-дитя)

Тема в разделе "PHP и базы данных", создана пользователем ilyaneba, 25 июн 2018.

  1. ilyaneba

    ilyaneba Новичок

    С нами с:
    5 авг 2017
    Сообщения:
    31
    Симпатии:
    1
    Здравствуйте!

    Есть в БД (mysqli) 2 таблицы. Одна родительская (nodes). Содержит основные поля страницы. Другая - дочерняя (fields). fields содержит 4 поля: id, nid (ссылка на соответствующую ноду), name (название поля), val (значение поля). У разных node может быть разное количество и разное содержание полей из fields. Нужно реализовать фильтр как по полям fields, так и по полям nodes. Фильтры взаимодействуют между собой через AND. Сделал вот так:

    Код (Text):
    1. SELECT * from nodes WHERE category = 4 AND id IN
    2.     (SELECT nid from fields WHERE name = \'blabla\' AND val = 1 AND nid IN
    3.         (SELECT nid from fields WHERE name = \'addition\' AND val < 160)
    4.     )
    В принципе, работает, но это я привел пример только для двух фильтров по полям из fields и одного поля из nodes. А их могут быть десятки, а возвращаемые результаты могут содержать сотни тысяч результатов и они вот так каскадно накладываются друг на дружку. Мне кажется, такая конструкция будет как бык помои съедать ресурсы сервера. Может, кто-нибудь знает более элегантный способ как это сделать?

    P.S. Не судите строго. В самом SQL я не очень разбираюсь. Надергал с учебников и с форумов скриптов, собрал с них вот это. Вроде работает :). Но хотелось бы что-то пограмотнее. Не может же быть, чтобы такая тривиальная задача решалась вот такими костылями.