PHP-SQL搜索查询(使用LIKE)为列赋予优先级
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-SQL搜索查询(使用LIKE)为列赋予优先级,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1373字,纯文字阅读大概需要2分钟。
内容图文
![PHP-SQL搜索查询(使用LIKE)为列赋予优先级](/upload/InfoBanner/zyjiaocheng/881/458d83f6001d4bfc99966088b060cb6a.jpg)
我正在使用CodeIgniter和活动记录.我有帖子表:
id | title | body | accepted | deleted
用户键入单词后,如果数据库中的标题或正文中包含6个匹配数据库的帖子,则将建议该数据库.
我想做的是,将那些标题中带有该短语的帖子优先于那些仅在正文中具有这些短语的帖子.怎么做?
$query = $this->db->select('id,title,body')
->from('posts')
->where(array('accepted'=>'1'))
->where(array('deleted'=>'0'))
->like('title', $seached_text)
->or_like('body', $seached_text)
->limit(6)
->order_by('title','asc');
解决方法:
这是SQL查询:
SELECT id, title, body
FROM posts
WHERE title LIKE '%{KEY}%' OR body LIKE '%{KEY}%'
ORDER BY CASE
WHEN (title LIKE '%{KEY}%' AND body LIKE '%{KEY}%') THEN 1
WHEN (title LIKE '%{KEY}%' AND body NOT LIKE '%{KEY}%') THEN 2
ELSE 3
END, title
LIMIT 0, 6;
在这种情况下,首先在标题和正文中都包含{KEY}的行,然后在标题中包含{KEY}的行,最后在正文中具有{KEY}的行.
您可以使用以下命令在CodeIgniter中运行此查询:
$query = $this-> db-> query(‘YOUR QUERY HERE’);
这是一个例子:
$key = $this->db->escape_like_str($seached_text);
$sql = <<<SQL
SELECT id, title, body
FROM posts
WHERE accepted = '1'
AND deleted = '0'
AND (title LIKE '%$key%' OR body LIKE '%$key%')
ORDER BY CASE
WHEN (title LIKE '%$key%' AND body LIKE '%$key%') THEN 1
WHEN (title LIKE '%$key%' AND body NOT LIKE '%$key%') THEN 2
ELSE 3
END, title
LIMIT 0, 6;
SQL;
$query = $this->db->query($sql);
$result = $query->result_array();
内容总结
以上是互联网集市为您收集整理的PHP-SQL搜索查询(使用LIKE)为列赋予优先级全部内容,希望文章能够帮你解决PHP-SQL搜索查询(使用LIKE)为列赋予优先级所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。