jQuery UI 自动完成,使用 PHP/MySQL 搜索 2 个表

Posted

技术标签:

【中文标题】jQuery UI 自动完成,使用 PHP/MySQL 搜索 2 个表【英文标题】:jQuery UI autocomplete, search 2 tables with PHP/MySQL 【发布时间】:2014-09-17 15:57:40 【问题描述】:

我有 2 个表需要搜索,我在这里列出了重要的表和字段:

Table: FAQs
Columns: id, title

Table: FIELD_VALUES
Columns: id, value

所以基本上,常见问题解答表包含一个问题“标题”,而 FIELD_VALUES 表包含与常见问题解答表中的问题相关的信息。因此,在这种情况下,“价值”是 html 格式的答案。我需要做的是在表常见问题解答中搜索“标题”,并在表 FIELD_VALUES 中搜索“值”。然后它应该只从常见问题解答表中返回唯一的问题“标题”。

我已经使用以下方法从常见问题解答中返回“标题”:

SELECT title FROM FAQs WHERE title LIKE '%".$_REQUEST['term']."%'"

这行得通,但我猜我需要执行某种形式的 UNION 然后 JOIN 来返回标题?

【问题讨论】:

我不完全确定您想要实现什么...这两个表之间的关系是什么?是一对多(一个有多个值的常见问题解答)吗?如果是,那么 FIELD_VALUES 中的外键名称是什么? 1 'title' 将永远只有 1 'value' 通过 'id' 与之相关。在理想的世界中,我会更改数据库结构,但我不能。 好的。因此,如果我理解正确,FAQ 和 Value 总是存在并且具有相同的 id 对吗?所以你需要的不是联合,而是加入试试这个: select f.title, fv.value from FAQs f inner join FIELD_VALUES fv on f.id=fv.id where title LIKE '%".$_REQUEST['term'] ."%'" 您可能还想了解 SQL 注入,因为您在这里所做的事情非常危险 是的,我会考虑安全地完成这一切。我只是想得到正确的方法。我一有空就会考虑一下你的建议。 【参考方案1】:

我理解,因为您希望在所有情况下都返回标题。如果搜索与常见问题解答中的标题、FIELD_VALUES 中的值匹配,或者两者都匹配。然后你应该加入:

SELECT FAQs.title FROM FAQs
JOIN FIELD_VALUES ON FIELD_VALUES.id = FAQs.id
WHERE FAQs.title LIKE '%".$_REQUEST['term']."%' OR
FIELD_VALUES.value LIKE '%".$_REQUEST['term']."%'

【讨论】:

您理解正确,我正在寻找所有情况下要返回的标题。让我试一试。【参考方案2】:

如果您将外键添加到 FIELD_VALUES 表,您应该能够实现您想要的:

Table: FAQs Columns: id, title

Table: FIELD_VALUES Columns: id, faqId_FK, value

那么您的 SQL 将如下所示:

$title = SELECT * FROM FAQs WHERE title LIKE '%". $_REQUEST['term']."%';
if(empty($title)) 
  $valueId = SELECT faqId_FK FROM FIELD_VALUES WHERE value LIKE '%". $_REQUEST['term']."%';
  if(!empty($valueId)) 
    $title = SELECT title FROM FAQs WHERE id = $valueId;
  
  

echo $title

如果您的表格之间没有某种联系,就不可能知道哪些值与哪些标题对应。

【讨论】:

我只想在下拉列表中返回“标题”。因此,如果搜索与“标题”显示的“标题”中的某些内容匹配。如果搜索匹配“值”中的某些内容,则显示与“id”相关的“标题”。如果搜索同时匹配“标题”和“值”,则仅显示“标题”。 知道了,因此仍然需要将值链接回标题的外键。目前看起来您在两个表上都有主键 ID,但没有将它们链接在一起。您可以使用 2 个带有逻辑的查询来实现这一点。 不幸的是,更改数据库结构不是一种选择。 他们已经链接了吗? FIELD_VALUES id = FAQs id 吗?如果是这样,我将在上面的示例查询中将“faqId_FK”更改为简单的“id”。 Niklas 的回答也应该有效。

以上是关于jQuery UI 自动完成,使用 PHP/MySQL 搜索 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 自动完成使用startsWith

没有 jQuery UI 的自动完成

单独更改 jquery-ui 自动完成小部件的宽度

使用 .live() 绑定 jQuery UI 自动完成

使用 JSON 的 jQuery UI 自动完成

使用带有多个输入字段的 jquery-ui 自动完成