@Obemygve

Почему нежелательный повторный вывод данных в запросе MySQL «phpMyAdmin»?

Здравствуйте, столкнулся с проблемным выводом данных в запросе MySQL в СУБД phpmyadmin:
Есть БД с 4 таблицами и связями между ними. При выполнение следующего запроса:
SELECT Images.Path_img, Product.Name, Product.Price, Description.Small_desc FROM `Images`, `Product`, `Description` WHERE Product.ID_img = Images.ID AND Product.ID_desc = Description.ID;

Выводит все отлично:
6378dbf5837c5292993732.png
Вот скрины связей всех таблиц:
Таблица "Product":
6378dce3ee500753354766.png
Таблица "Images":
6378dd1dbbc21406865279.png
Таблица "Description":
6378dd31c604c918128645.png
Но... Есть таблица "Popular_product" которая ссылается на основную таблицу "Product" на поле "ID":
6378de6949654621358406.png
При выполнение запроса:
SELECT Images.Path_img, Product.Name, Description.Small_desc, Product.Name FROM `Images`, `Product`, `Description`, `Popular_product` WHERE Popular_product.ID_regularProduct = Product.ID;

Я получаю вот такую несуразацу (подобных строк там 81):
6378df55784a7031234769.png
С чем это может быть связано? Буду признателен любой помощи) Хотелось бы задать дополнительный вопрос. Является ли такая структура БД с такими связями более чем нормальной, или нет? Если нет, то почему? Я маслёнок в БД и могу допускать детские ошибки, по этому не хотелось бы получить неадекватную критику.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Перепишите запрос с явным указанием JOIN'ов и всё станет ясно.
SELECT Images.Path_img, Product.Name, Description.Small_desc, Product.Name
  FROM `Images`
  JOIN `Product`
  JOIN `Description`
  JOIN `Popular_product` ON Popular_product.ID_regularProduct = Product.ID;

Вы берёте полное декартово произведение первых трёх таблиц и только при присоединении четвёртой таблицы накладываете какие-то ограничения.
Для каждой из строк таблицы `Images` присоединить все строки таблицы `Product`.
Для каждой из получившихся строк присоединить все строки таблицы `Description`.
Для каждой из получившихся строк присоединить строки таблицы `Popular_product` согласно условию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы