我正在使用创建电子商务网站 MySQL
. 我已成功创建数据并将其插入数据库。
这是我的数据库模式
table: categories table: product_types
+----+--------------+ +----+-------------+------------+
| id | name | | id | category_id | name |
+----+--------------+ +----+-------------+------------+
| 1 | Electronics | | 1 | 1 | Smartphone |
| 2 | Fashion | | 2 | 1 | Speakers |
+----+--------------+ +----+-------------+------------+
table: products
+----+-----------------+-------------+-------------------+-------+
| id | product_type_id | category_id | name | price |
+----+-----------------+-------------+-------------------+-------+
| 1 | 1 | 1 | Samsung Galaxy A3 | 300 |
| 2 | 1 | 1 | Samsung Galaxy A7 | 400 |
+----+-----------------+-------------+-------------------+-------+
table: options table: option_values
+----+-----------------+-------+ +----+-----------+------------+
| id | product_type_id | name | | id | option_id | name |
+----+-----------------+-------+ +----+-----------+------------+
| 1 | 1 | RAM | | 1 | 1 | 512 MB |
| 2 | 1 | Screen| | 2 | 1 | 1 GB |
| 3 | 1 | OS | | 3 | 3 | Android 5 |
+----+-----------------+-------+ | 4 | 3 | Android 6 |
| 5 | 2 | HD |
| 6 | 2 | FHD |
+----+-----------+------------+
table: product_option_values
+----+------------+-----------+-----------------+
| id | product_id | option_id | option_value_id |
+----+------------+-----------+-----------------+
| 15 | 1 | 1 | 1 |
| 16 | 1 | 2 | 5 |
| 17 | 1 | 3 | 3 |
| 18 | 2 | 1 | 2 |
| 19 | 2 | 2 | 6 |
| 20 | 2 | 3 | 4 |
+----+------------+-----------+-----------------+
搜索必须通过 name
每个表的列并返回 name
以及 price
从 products
table。问题是我不知道如何在所有的表中执行全文搜索。
有什么简单的方法吗?
1条答案
按热度按时间b5buobof1#
你需要一个查询
LEFT JOIN
在每个表上使用基于全文搜索函数的条件进行搜索MATCH
,带有WHERE
子句来筛选不匹配的记录。这个SELECT DISTINCT
确保您不会看到重复项。我们需要手动调整
JOIN
从每个表到products
:option_values
是最复杂的情况,因为它不直接引用products
(上的附加连接)product_option_values
需要,别名pov
在下面。