Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 标签搜索引擎_Php_Sql_Sqlite - Fatal编程技术网

Php 标签搜索引擎

Php 标签搜索引擎,php,sql,sqlite,Php,Sql,Sqlite,所以,我是PHP和数据库的新手,这里有一个问题: 我有一个名为news的表,其中一列是tags。此列包含一个或多个由空格分隔的标记,如economics-politics-sports。我有一个页面,它将接收一个或多个标记作为单个参数,我必须返回至少包含一个标记的所有行 我可以分解标记,并根据需要进行尽可能多的数据库访问,但我确信这不是实现它的方法=p LIKE和IN也不起作用,因为参数可能以任何顺序包含多个标记 有什么帮助吗?这不是如何构建的 有一个名为news的表,一个名为tags的表,还有

所以,我是PHP和数据库的新手,这里有一个问题:

我有一个名为
news
的表,其中一列是
tags
。此列包含一个或多个由空格分隔的标记,如
economics-politics-sports
。我有一个页面,它将接收一个或多个标记作为单个参数,我必须返回至少包含一个标记的所有行

我可以分解标记,并根据需要进行尽可能多的数据库访问,但我确信这不是实现它的方法=p

LIKE
IN
也不起作用,因为参数可能以任何顺序包含多个标记


有什么帮助吗?

这不是如何构建的

有一个名为news的表,一个名为tags的表,还有一个名为tagsToNews的表


在tagsToNews中,只需记录新闻条目ID和标记ID,然后进行连接即可获得所需内容。这也意味着标签可以在不破坏任何东西的情况下重命名

最简单的解决方案

将您的表转换为MyISAM表,并使用全文索引为
标记编制索引。然后,使用
MATCH()
函数根据查询字符串(可能包含多个单词)提取行的匹配值

更具适应性的解决方案


删除该表并用每行一个标记重新创建它。您将通过这种方式有效地实现全文数组,因为它就是这样。如果您打算爆炸数据,请避免将数据存储在长字符串中-通常,存储原子部分的效率更高,因为您不必依赖饥饿型操作符。

Hmm,这似乎是一个解决方案,谢谢=)。还有一个问题:我还有一个页面可以插入新闻。有没有办法在同一查询中插入它并将其映射到标记?更重要的是:如果标签不存在,那么创建标签?不是在一个查询中创建,但您可以始终使用插入触发器。大多数人在两个查询中(或多个查询中)创建标签,但使用触发器更可靠。感谢您的回复。我以前从来没有听说过触发器,所以我现在选择2个查询。怎么样?一个用来插入新的,另一个用来映射它?但是,如果新的查询可能有2个标记,那么如何只在一个查询中映射呢?如果它是一个新标签,我也必须插入标签怎么办?我有点迷路了,有参考资料吗?提前感谢=)。