gpt4 book ai didi

mysql - 按类别自定义网站搜索

转载 作者:行者123 更新时间:2023-11-29 13:57:41 25 4
gpt4 key购买 nike

我想为我正在开发的网站创建一个简单的搜索。我的数据库中有一些项目,它们都拥有特定的类别 ID,并且可以选择链接到多个标签。

我想采用输入的任何搜索词并查询category.name和tag.name字段以查找与这些词匹配的项目。

我正在寻找有关如何创建高效/快速查询的建议,该查询可以执行此操作并按最匹配(最匹配)的项目对结果进行排序

这是我的相关表格的快速版本:

项目

id |类别 |标题 |描述

类别

id |名称 |父ID

标签

id |名称 |用途

item_tag

项目ID |标签ID

最佳答案

我还是没完全明白你想要什么。
好吧,这是我们讨论的第一个版本。
我建议您创建如下 View :

CREATE OR REPLACE VIEW `search_view` AS
SELECT
i.id AS `item_id`,
i.title AS `item_title`,
c.id AS `cat_id`,
c.name AS `cat_name`,
t.id AS `tag_id`,
t.name AS `tag_name`
FROM item AS i
LEFT OUTER JOIN item_tag AS it
ON (i.id = it.itemId)
LEFT OUTER JOIN tag AS t
ON (it.tagId = t.id)
LEFT OUTER JOIN category AS c
ON (i.category = c.id)
WHERE ((t.id IS NOT NULL) OR (c.id IS NOT NULL));

然后您使用附近的内容从 View 中查询

SELECT
*,
(
IF(tag_name like ?, 2, 0)
+ IF(cat_name like ?, 4, 0)
+ IF(item_title like ?, 1, 0)
) AS `priority`
FROM search_view
GROUP BY item_id
ORDER BY SUM(priority);

上面的代码中没有测试。报告您遇到的任何问题

[第一版]您使用 PHP,不是吗?好吧,您可以使用 PHP string functions 标准化您的查询;一种方法是将每次出现的 ',' 替换为 '|',删除多余的空格并执行以下查询: [我将使用 @VAR 给出一个示例(实际上您将用输入字符串替换它) ]

SET @VAR = 'notebook|samsung';
SELECT
*,
(
IF (tag_name REGEXP CONCAT('.*(', @VAR, ').*'), 2, 0)
+ IF (cat_name REGEXP CONCAT('.*(', @VAR, ').*'), 4, 0)
+ IF (item_title REGEXP CONCAT('.*(', @VAR, ').*'), 1, 0)
) AS `priority`
FROM search_view
ORDER BY priority DESC;

这次我测试了。是的,您可以使用 MySQL 函数,例如 REPLACE(REPLACE(@VAR,' ',''), ',', '|')。但我建议您使用 PHP(或 java、python 等)来完成。

关于mysql - 按类别自定义网站搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15582648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com