Получение данных из трех таблиц? - PullRequest
0 голосов
/ 08 мая 2020

У меня три таблицы категория , бренд , товар .
Таблица категорий -

+---------------+--------------+------+-----+---------+----------------+
| id            | int          | NO   | PRI | NULL    | auto_increment |
| category_name | varchar(255) | NO   |     | NULL    |                |
| category_UID  | varchar(255) | NO   | UNI | NULL    |                |
| date          | date         | YES  |     | NULL    |                |
| time          | time         | YES  |     | NULL    |                |
| is_delete     | tinyint(1)   | YES  |     | 0       |                |
+---------------+--------------+------+-----+---------+----------------+

Таблица брендов -

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int          | NO   | PRI | NULL    | auto_increment |
| brand_name | varchar(255) | NO   |     | NULL    |                |
| brand_UID  | varchar(255) | NO   | UNI | NULL    |                |
| fk_id      | varchar(255) | NO   |     | NULL    |                |
| date       | date         | NO   |     | NULL    |                |
| time       | time         | NO   |     | NULL    |                |
| is_delete  | tinyint(1)   | YES  |     | 0       |                |
+------------+--------------+------+-----+---------+----------------+

Товары -

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int          | NO   | PRI | NULL    | auto_increment |
| category_UID    | varchar(255) | NO   |     | NULL    |                |
| brand_UID       | varchar(255) | NO   |     | NULL    |                |
| product_name    | varchar(255) | NO   |     | NULL    |                |
| product_UID     | varchar(255) | NO   | UNI | NULL    |                |
| keyword         | varchar(255) | YES  |     | NULL    |                |
| photo           | varchar(255) | NO   |     | NULL    |                |
| photo_thumbnail | varchar(255) | YES  |     | NULL    |                |
| date            | date         | NO   |     | NULL    |                |
| time            | time         | NO   |     | NULL    |                |
| is_delete       | tinyint(1)   | YES  |     | 0       |                |
| visible         | tinyint(1)   | YES  |     | 1       |                |
+-----------------+--------------+------+-----+---------+----------------+

На странице HTML есть ввод типа поиска, в котором пользователь вводит не менее трех символов, чтобы получить результат поиска из БД.
Каким будет метод поиска -
Я хочу найти продукты и получить все их данные.
Строка поиска будет найдена по product_name или ключевым словам из таблицы продуктов. Если строка поиска не найдена в таблице продуктов, строку поиска можно найти по category_name или brand_name из таблицы категорий или таблицы брендов соответственно. Теперь, если мы получили наш поиск, то в таблице продуктов должен присутствовать category_UID . (Это означает, что мы получим наш поиск только тогда, когда UID этой категории сохранен в таблице продуктов)
Я хочу получить вывод как -
Если поиск успешен, мы должны получить все данные столбца из таблица продуктов, включая еще два столбца category_name, brand_name из таблицы категорий и таблицы брендов соответственно.
Примечание:
только один атрибут category_UID является общим во всех трех таблицах. Итак, как я могу получить поиск продукта?
Можно ли решить эту проблему с помощью JOIN или UNION , иначе я должен использовать процедурный способ.

1 Ответ

1 голос
/ 08 мая 2020

В вашей таблице category_UID и product_UID являются ссылками на внешние ключи, тогда следующий запрос будет работать.

select  p.id as id,p.category_UID as category_UID,p.brand_UID as brand_UID,
        p.product_name as product_name,p.product_UID as product_UID,p.keyword as keyword,
        p.photo as photo,p.photo_thumbnail as photo_thumbnail,p.date as date,p.time as time,
        p.is_delete as is_delete,p.visible as visible,c.category_name as category_name, b.brand_name as brand_name
        FROM product as p 
        JOIN Brand as b ON p.brand_UID = b.brand_UID
        JOIN category as c ON p.category_UID = c.category_UID 
        where p.product_name like '%<search_str>%' OR
        p.keyword like '%<search_str>%' OR
        b.brand_name like '%<search_str>%' OR
        c.category_name like '%<search_str>%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...