Mysql 从三个表中提取数据?

Mysql 从三个表中提取数据?,mysql,sql,Mysql,Sql,我有三个表类别,品牌,产品 类别表- +---------------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | category_name | varchar(255) | NO | | NULL | | | category_U

我有三个表类别品牌产品
类别表-

+---------------+--------------+------+-----+---------+----------------+
| 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页面中有一个搜索类型输入,用户将在其中键入至少三个字符,以从DB获取搜索结果。
搜索技术将如何?
我想搜索产品并获取其所有数据。
搜索字符串将按产品名称或产品表中的关键字查找。 如果在产品表中未找到搜索字符串,则可分别通过类别表或品牌表中的
类别名称
品牌名称
查找搜索字符串。现在,如果我们得到搜索,那么产品表中必须存在类别UID。(这意味着只有当类别UID存储在产品表中时,我们才能获得搜索)
我想将输出作为-
如果搜索成功,我们必须从product表中获取所有列数据,包括从category表和brand表中分别获取另外两列
category\u name
brand\u name

注意:
所有三个表中只有一个属性
category\u UID
。 那么我如何获得产品搜索?

这可以通过连接联合技术解决,否则我必须使用程序方法

在您的表中,category\u UID和product\u 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>%';
选择p.id作为id,p.category\u UID作为category\u UID,p.brand\u UID作为brand\u UID,
p、 产品名称作为产品名称,p.product\u UID作为产品UID,p.keyword作为关键字,
p、 照片作为照片,p.photo_缩略图作为照片_缩略图,p.date作为日期,p.time作为时间,
p、 是否按原样删除,p.可视为可见,c.类别名称为类别名称,b.品牌名称为品牌名称
从乘积p
在p.Brand\u UID=b.Brand\u UID上以b的身份加入品牌
在p.category\u UID=c.category\u UID上以c的形式加入类别
其中p.product\u名称,如“%”或
p、 关键字“%”或
b、 品牌名称,如“%”或
c、 类别名称,如“%”;

感谢您的努力,但出现了一个错误,“on子句”中的未知列“b.category\u UID”再次更新了查询语句。请执行更新后的查询我想再问您一件事,如果产品表中有4倍于12个属性,那么我们必须逐个编写属性来创建sql查询,这很痛苦。我们可以指定
*
而不是列名,但在这个结果中,查询将返回所有联接表中的所有数据(在本例中为所有三个表)。此外,它有可能出现列歧义。我使用*来缩短sql查询,但是打印了重复的列,是否有任何解决方案可以通过仍然使用
*
来删除重复的列?否则,我必须使用php删除重复的列。