簡體   English   中英

復雜的mysql查詢問題

[英]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

所以我想要並嘗試構建幾個小時的是一個查詢:

  • 從表“bb1_threads”中選擇字段“threadid”和“topic”
  • 在表“bb1_threads”中搜索字段“topic”
  • 在表“bb1_posts”中搜索字段“message”
  • 按最佳匹配對結果進行排序。 (如果搜索結果比“message”列中的字符串更接近,則使用“topic”中的搜索結果)

如果有人可以發布現成的查詢,我將不勝感激:聖誕快樂 :)

我需要這段代碼正是你所需要的:

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 子句僅返回第一個結果。

這可能有效。

  1. 通過message搜索bb1_posts並將1指定為search_rank

  2. topic搜索bb1_thread並將2指定為search_rank

  3. 結合兩者的結果,按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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM