помогите сделать быборку из базы, куча таблиц

Статус
В этой теме нельзя размещать новые ответы.

асс

Мой дом здесь!
Регистрация
13 Окт 2006
Сообщения
762
Реакции
230
Доброй ночи, уже весь мозг схавал не могу вкурить как выбрать из базы нужные данные.

есть таблицы
product тут есть поле image
product_description
product_to_store.
product_image тут есть поле image
product_reward
product_to_category
url_alias

все таблицы имеют связывающее поле product_id.

мне необходимо выбрать из базы в цикле все данные из всех таблиц сразу.


Проще говоря есть таблица продукт, в ней связи на другие таблицы, которые я указал выше.


53 это product_id


INSERT INTO `product` VALUES (53, 'Автомобиль', '', '', '', '', '', '', '', '', 7, 'big/T.jpg', 0, 1, 2300.0000, 1, 0, 1);
INSERT INTO `product_image` VALUES ('', 53, 'small/ T.jpg', 0);
INSERT INTO `product_reward` VALUES ('', 53, 1, 0);
INSERT INTO `product_description` VALUES (53, 1, 'Авто', 'Авто', 'Авто', 'Авто', 'Авто', '');

И так далее.

Как это добро выбрать одним махом.
 
Как это добро выбрать одним махом.
Зачем? Длинный JOIN (особенно с учётом many-to-many таблиц и product_to_category product_to_store, которые приведут к увеличению числа строк в результате) хуже нескольких простых запросов. Тем более, (раз используется цикл) есть возможность их обработать результат в скрипте.
 
Зачем? Длинный JOIN (особенно с учётом many-to-many таблиц и product_to_category product_to_store, которые приведут к увеличению числа строк в результате) хуже нескольких простых запросов. Тем более, (раз используется цикл) есть возможность их обработать результат в скрипте.


Подскажите как сделать в цикле у меня конструкция вида
Код:
if(mysql_num_rows($dd) >0) {
while ($r = mysql_fetch_array($dd)){
 
while - это уже цикл.. до тех пор, пока в результате есть необработанные строки.
 
while - это уже цикл.. до тех пор, пока в результате есть необработанные строки.
Я знаю что это цикл, я могу сделать выборку из 2х ьаблиц но как ее сделать из 5.

например у меня product_id есть у всех таблиц, но сложность тут в том что image есть тоже у двух таблиц.

Если я выбираю t1 и t2 то where t1.product_id=t2.product_id получаю данные, но как мне сделать чтоб t3.image=t1.image.
 


Зачем делать (в условии?) t3.image=t1.image? При том, что в Вашем примере (из первого поста) они не равны и выборки просто не будет.
 
Зачем делать (в условии?) t3.image=t1.image? При том, что в Вашем примере (из первого поста) они не равны и выборки просто не будет.

как выбрать картинку из этих таблиц которые ниже.
product тут есть поле image
product_image тут есть поле image

При этом выборку надо делать из еще нескольких таблиц.
 
как выбрать картинку из этих таблиц которые ниже.
product тут есть поле image
product_image тут есть поле image
Если не получается сформулировать/решить задачу целиком - решай по частям.

Код:
SELECT image from product;
SELECT image from product_image;
Первый запрос достанет поле image из таблицы product, второй - из таблицы product_image
Если добавить WHERE - можно ограничиться меньшим количеством строк.. в частности, одной строкой где product_id = {чему-нибудь конкретному}, например 53

Когда дойдёт очередь до следующих таблиц - дальше смотреть.. Если нет целостной картины... Если есть - повторюсь, сформулировать ЧЁТКО "что и куда", а не "несколько таблиц" и сделать.

Когда будет рабочий вариант - при необходимости оптимизировать (к примеру, разумный JOIN вставить, или выбор всех строк и разбор уже в скрипте)

Что в итоге нужно? "просто выбрать"? В массив (структура какая?) преобразовать? Дальше выводить в табличке? Сохранить в файл? В каком формате данные нужны?
 
вы вообще учили SQL? Там есть такая функция как Inner Join. Почитайте, пожалуйста, о ней. В принципе данную выборку сделать через нее будет легко

а если что-то "зациклить" хотите, то тригеры вам в помощь

Если выложите скрины таблиц, то думаю найдутся умельцы, которые помогут вам написать нужный SQL-запрос (если я вам не успею написать), т.к. трудно понять, что именно есть и из какой таблицы тянется
 
Там есть такая функция как Inner Join. Почитайте, пожалуйста, о ней. В принципе данную выборку сделать через нее будет легко
Вся сложность в том, что не ясно, "какая выборка" нужна... особенно с учётом таблиц many-many - будет много строк на 1 товар. (да и таблица product_image, видимо, не по первичному ключу JOIN-ится... т.е. возможны дубли.)

Полям с одинаковыми именами можно через AS задавать псевдонимы
Код:
SELECT *, p.image as p_image, pi.image as pi_image FROM `products` p
INNER JOIN product_description pd USING(product_id)
INNER JOIN product_image as pi USING(product_id)
если, конечно, это интересующая часть ответа...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху