Привет всем. Подскажите как составить запрос к базе. Или возможно надо спроектировать заново структуру бд. Есть 3 таблицы: 1. categories (id, name) 2. products (id, cat_id, product) 3. models (id, prod_id, model, price) 1-я табл. содержит категории: "Эконом", "Стандарт", "Премиум" 2-я табл. содержит продукции: Sony, Panasonic, Samsung, Lg, ... 3-я табл. содержит модели для каждой продукции: KDL-42W705B, TX-PR55ST60, UE32H5500, ... Соб-но, необходимо вывести каталог из 3 таблиц. Хотелось бы от запроса получить: 1. Эконом: Panasonic TX-PR55ST60, Samsung UE32H5500. 2. Стандарт: Sony KDL-42W705B и тд.
Вопрос правильном и оптимальном составе запроса. Делаю пока так: Код (Text): SELECT c.name, GROUP_CONCAT(p.product) AS products, GROUP_CONCAT(m.model) AS models FROM `models` m JOIN `products` p ON p.id = m.prod_id JOIN `categories` c ON c.id = p.cat_id GROUP BY c.id В итоге получаю ответ: Код (Text): 1. Эконом Panasonic, Samsung TX-PR55ST60, UE32H5500 2. Стандарт Sony KDL-42W705B ... и тд. Как бы затем сплитом разбиваю строки на массивы и соединяю продукт + модель. Но мне кажется, что можно как-то лучше и оптимальней составить запрос. Время выборки занимает от 150-850 мс. Все 3 таблицы в сумме пока имеют около 50 записей. Можно ли как-то оптимизировать запрос?
А чем вам не угодило Код (Text): select c.name category, p.name product, m.name model from categories c left join products p on p.cat_id = c.id left join models m on m.prod_id = p.id А склеите как вам надо уже в РНР. Ну реально, 850 мс на 50 записей - это трындец какой-то.
Хыиуду, я не знаю в чём прикол, но ваш запрос занимает всего 0.0010 сек. !!!! Спасибо. Хотя, я так делал изначально, но не проверял длительность запроса. Действительно, я лучше получу ответ не совсем в удобном виде и обработаю php-скриптом, чем жертвовать производительностью. igordata, а вообще это нормальная практика разделять обращение к бд несколькими запросами? П.с: спасибо за ответы.