首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >高级MySQL搜索帮助

高级MySQL搜索帮助
EN

Stack Overflow用户
提问于 2018-12-05 00:59:43
回答 2查看 0关注 0票数 0

我一直试图找出一些东西,现在无济于事。我的MySQL知识最多是基本的,所以我可以使用一些指导我应该用于以下内容:

我需要搜索2张表('bible' , 'books')。现在我只是用以下查询搜索'bible':

代码语言:javascript
复制
SELECT * 
  FROM bible 
 WHERE text LIKE '%" . $query . "%' 
 ORDER BY likes DESC 
    LIMIT $start, 10

现在,我需要添加另一个搜索一些非常高级的东西的部分。这是我想要做的伪代码,我知道它不起作用:

代码语言:javascript
复制
SELECT * 
  FROM bible 
 WHERE books.book+' '+bible.chapter+':'+bible.verse = '$query'

$ query将等于Genesis 1:2,Genesis来自books.book,1来自bible.chapter,2来自bible.verse

EN

回答 2

Stack Overflow用户

发布于 2018-12-05 09:21:16

你的答案很接近了, 要连接字段,可以用CONCAT()函数:

代码语言:javascript
复制
SELECT * FROM bible WHERE CONCAT(books.book, ' ', bible.chapter, ':', bible.verse) = '$query'
票数 0
EN

Stack Overflow用户

发布于 2018-12-05 10:23:08

我建议在应用程序代码中设计一种方法来分解该查询,以便您与关键字分开搜索book, chapter, verse。

这意味着您需要与书籍文本分开的书籍,章节和诗句。

您还应该使用FULLTEXT索引,因为LIKE通配符搜索效率极低。

以下是我使用PDO在PHP中运行查询的方法:

代码语言:javascript
复制
$quoted_query = $pdo->quote($query);
$sql = "SELECT * FROM bible 
        WHERE book = ? AND chapter = ? AND verse = ?
          AND MATCH(text) AGAINST ({$quoted_query})"
$stmt = $pdo->prepare($sql);
$stmt->execute(array($book, $chapter, $verse));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档