mysql连接多表时如何进行全文搜索

ct2axkht  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(482)

我正在使用创建电子商务网站 MySQL . 我已成功创建数据并将其插入数据库。
这是我的数据库模式

  1. table: categories table: product_types
  2. +----+--------------+ +----+-------------+------------+
  3. | id | name | | id | category_id | name |
  4. +----+--------------+ +----+-------------+------------+
  5. | 1 | Electronics | | 1 | 1 | Smartphone |
  6. | 2 | Fashion | | 2 | 1 | Speakers |
  7. +----+--------------+ +----+-------------+------------+
  8. table: products
  9. +----+-----------------+-------------+-------------------+-------+
  10. | id | product_type_id | category_id | name | price |
  11. +----+-----------------+-------------+-------------------+-------+
  12. | 1 | 1 | 1 | Samsung Galaxy A3 | 300 |
  13. | 2 | 1 | 1 | Samsung Galaxy A7 | 400 |
  14. +----+-----------------+-------------+-------------------+-------+
  15. table: options table: option_values
  16. +----+-----------------+-------+ +----+-----------+------------+
  17. | id | product_type_id | name | | id | option_id | name |
  18. +----+-----------------+-------+ +----+-----------+------------+
  19. | 1 | 1 | RAM | | 1 | 1 | 512 MB |
  20. | 2 | 1 | Screen| | 2 | 1 | 1 GB |
  21. | 3 | 1 | OS | | 3 | 3 | Android 5 |
  22. +----+-----------------+-------+ | 4 | 3 | Android 6 |
  23. | 5 | 2 | HD |
  24. | 6 | 2 | FHD |
  25. +----+-----------+------------+
  26. table: product_option_values
  27. +----+------------+-----------+-----------------+
  28. | id | product_id | option_id | option_value_id |
  29. +----+------------+-----------+-----------------+
  30. | 15 | 1 | 1 | 1 |
  31. | 16 | 1 | 2 | 5 |
  32. | 17 | 1 | 3 | 3 |
  33. | 18 | 2 | 1 | 2 |
  34. | 19 | 2 | 2 | 6 |
  35. | 20 | 2 | 3 | 4 |
  36. +----+------------+-----------+-----------------+

搜索必须通过 name 每个表的列并返回 name 以及 priceproducts table。问题是我不知道如何在所有的表中执行全文搜索。
有什么简单的方法吗?

b5buobof

b5buobof1#

你需要一个查询 LEFT JOIN 在每个表上使用基于全文搜索函数的条件进行搜索 MATCH ,带有 WHERE 子句来筛选不匹配的记录。这个 SELECT DISTINCT 确保您不会看到重复项。
我们需要手动调整 JOIN 从每个表到 products : option_values 是最复杂的情况,因为它不直接引用 products (上的附加连接) product_option_values 需要,别名 pov 在下面。

  1. SELECT DISTINCT p.name, p.price
  2. FROM
  3. products p
  4. LEFT JOIN categories c
  5. ON MATCH(c.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
  6. AND c.id = p.category_id
  7. LEFT JOIN product_types pt
  8. ON MATCH(pt.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
  9. AND pt.category_id = p.category_id
  10. LEFT JOIN options o
  11. ON MATCH(o.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
  12. AND o.product_type_id = p.product_type_id
  13. LEFT JOIN product_option_values pov
  14. ON pov.product_id = p.id
  15. LEFT JOIN option_values ov
  16. ON MATCH(ov.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
  17. AND ov.id = pov.option_value_id
  18. WHERE
  19. COALESCE(c.id, pt.id, o.id, ov.id) IS NOT NULL
展开查看全部

相关问题