gpt4 book ai didi

php - 如何在 MySQL 中的多个表中进行搜索

转载 作者:行者123 更新时间:2023-11-30 23:31:06 27 4
gpt4 key购买 nike

详细

假设我们有这样的表格:

enter image description here

如您所见,questions 通过外键与 4 个表相连。

使用 Datatablesserver-side processing (我修改了给定的 php 代码以处理多个表)用于客户端。

问题

我想做的是:当用户搜索某物时,客户端通过 ajax 将关键字发送到服务器端。在官方网站 ( link to page ) 上处理搜索的代码如下所示:

$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
$sWhere = "WHERE (";
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
}
$sWhere = substr_replace( $sWhere, "", -3 );
$sWhere .= ')';
}

我想修改这部分来处理多表处理。

例如:如果用户输入了某个部分的名称(名称位于 sections 表,section 列),我如何找到问题(来自 questions table) 与本节相关?这是否可以通过一个且唯一的查询实现?

任何建议将不胜感激:)

最佳答案

你根本不应该为此使用 LIKE 运算符,尤其是当这些表可以增长到超过几百行时。前面带有通配符的 LIKE(例如 LIKE '%key'LIKE '%key%')不能使用任何索引来优化搜索,这意味着这些查询可能会变成只有数千行非常慢。

理想情况下,您应该构建一个非规范化结构,在一行中包含任何文本可搜索信息,然后将其放入全文搜索并将其用于查询。它可以是 MySQL 在 MyISAM 表中本地支持的 FULLTEXT 键,或者是外部全文搜索引擎,例如 Sphinx (http://www.sphinxsearch.com/)。

一旦将其非规范化为单一结构,您将能够非常轻松地进行所有查询。

这并不意味着您应该摆脱基本结构,而是为了为此类搜索构建有效的解决方案,您将不得不引入一些数据重复。

关于php - 如何在 MySQL 中的多个表中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10572765/

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