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删除重复的列。