【问题标题】:Mysql Full Text Search Query Modification For Multiple TablesMysql全文搜索查询修改多表
【发布时间】:2012-08-10 08:28:16
【问题描述】:

我正在构建一个 Mysql 全文搜索,我有 4 个表要搜索。当我在搜索查询中仅使用单个表时它可以工作,但是当我在查询中使用多个表时它不起作用。我也不想在查询中使用 UNION ALL,因为我使用复选框选择选项在单个或多个表中执行搜索。

对多个表的 MySQL 查询不起作用。

$sqlquery = mysql_query("(SELECT * FROM table1, table2, table3, table4 WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE) )ORDER by pflink desc, $orderby $sortby LIMIT $rowsperpage OFFSET $offset ")or die (mysql_error());

它给了我错误Column 'pflink' in where clause is ambiguous

使用单表查询有效。

$sqlquery = mysql_query("(SELECT * FROM table1 WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE) )ORDER by pflink desc, $orderby $sortby LIMIT $rowsperpage OFFSET $offset ")or die (mysql_error());

HTML 复选框代码

  <input name="all-tables" type="checkbox" value="true" checked="checked" id="check-all" >
  <input name="table1" type="checkbox" value="true" disabled="disabled" >
  <input name="table2" type="checkbox" value="true" disabled="disabled" >
  <input name="table3" type="checkbox" value="true" disabled="disabled" >
  <input name="table4" type="checkbox" value="true" disabled="disabled" >

请建议任何可能的方式来修改此查询以使其适用于多个表。

谢谢。

【问题讨论】:

  • 因为你的mysql引擎对pflink属于哪个表感到困惑:)
  • @Sabin pflink 和 title 在所有表中,实际上所有表的结构相同但值不同。
  • 我希望你已经在每 4 个表上定义了索引??同样,如果您有所有具有相同结构的表,pflink 仍然是模棱两可的,因为您还没有定义 pflink 引用哪个表。此外,到目前为止我知道,全文搜索不会在多个表中工作。类似讨论stackoverflow.com/questions/1241602/…

标签: php mysql html search


【解决方案1】:

很久以前,我遇到了类似的情况。我有多个表格可以使用全文,但我不知道该怎么做。我搜索但找不到路。所以最后我想出了以下想法

1. Make another table say "keywords", with fields title, description , item_id, and the table data belongs to.
2. make a code to fetch all title and description from table1,table2 and so on and insert it to keywords.
3. Make keywords table suitable for full text search.
4. when user searches, search keyword table. Retrieve relevant value from table1, table 2 etc from the recordset (as you get item id and table from the full text search query).

这样做的好处是查询会更快更容易。

希望对你有帮助

【讨论】:

  • 您的解决方案就像是制作一个包含所有表格数据的单个表格,然后进行全文搜索。
  • 是的,我有不同的表,结构相似,但价值不同。第一个表包含与衣服有关的价值,第二个与鞋子有关,第三个与化妆品有关,第四个与书籍有关。而且我有一个像谷歌一样的文本框,在搜索时我必须显示所有表格的结果。我发现这种方式有效且更容易..事实上这只是我想出的解决方案。我编写了一个 cron 作业来截断关键字表并从所有表中选择所有值并将其再次插入到关键字表中。您也可以偶尔手动运行此代码。
  • 你知道一个可以检查WHERE MATCH(pflink= somecategory, title)等类别的单一搜索查询的方法
  • 你是这个意思吗? SELECT * FROM table WHERE MATCH(pflink, title) AGAINST("categoryname");
  • SELECT * FROM all_tables WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE) HAVING pflink LIKE '%somecategory%' 这适用于查询而不是SELECT COUNT(*) FROM all_tables WHERE MATCH (pflink, title) AGAINST ('%$keyword*%' IN BOOLEAN MODE) HAVING pflink LIKE '%somecategory%'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多