[英]Complex mysql query issue
我目前正在進行實時搜索並遇到以下問題:
以下查詢有效,但我寧願從表“bb1_threads”中收集“topic”和“threadid”列,只從表“bb1_posts”中收集“message”列
SELECT posttopic AS topic, threadid FROM bb".$n."_posts WHERE message LIKE '%$search_string%' OR posttopic LIKE '%$search_string%' LIMIT 1
以下查詢也有效,但我無法通過這種方式從表 bb1_posts 中搜索字段“消息”:
SELECT topic, threadid FROM bb".$n."_threads WHERE topic LIKE '%$search_string%' LIMIT 1
所以我想要並嘗試構建幾個小時的是一個查詢:
如果有人可以發布現成的查詢,我將不勝感激:聖誕快樂 :)
我需要這段代碼正是你所需要的:
SELECT t.threadid, t.topic, p.message
FROM bb".$n."_threads t
LEFT JOIN bb".$n."_posts p ON t.threadid = p.threadid
WHERE t.topic LIKE '%$search_string%' OR p.message LIKE '%$search_string%'
ORDER BY (CASE
WHEN p.message LIKE '%$search_string%' THEN 1
ELSE 2
END) ASC
LIMIT 1
此查詢將從 bb1_threads 表中選擇 threadid 和 topic 列,並從 bb1_posts 表中選擇 message 列。 它將在主題和消息列中搜索 $search_string,然后根據首先找到搜索字符串的列對結果進行排序(因此在消息列中匹配的結果將排在在中匹配的結果之前主題欄)。 最后,它將使用 LIMIT 1 子句僅返回第一個結果。
這可能有效。
通過message
搜索bb1_posts
並將1
指定為search_rank
按topic
搜索bb1_thread
並將2
指定為search_rank
結合兩者的結果,按search_rank
排序並選擇第一行
select threadid as threadid,
posttopic as topic,
1 as search_rank
from bb1_posts
where message like '%$search_string%'
union all
select threadid as threadid,
topic as topic,
2 as search_rank
from bb1_threads
where topic like '%$search_string%'
order by search_rank
limit 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.