2013-06-13 42 views
2

我忙於爲我的客戶建立一個目錄網站,並且需要稍微搜索一下搜索。SQL選擇數字是否在區間

該目錄包含一大堆產品。每個產品都有能力包含一個單一的,多個和一個間隔的itemnumber。爲了澄清一點,我在下面列出了幾個例子。

實施例1) 多個itemnumbers

itemnumber = 100,105,109,200

實施例2) itemnumbers的間隔

itemnumber = 100 - 110

實施例3) 組合

itemnumber = 100 - 110,220,300 - 310,400,因此401

我的問題是:

是有一種語法,允許我檢查以' - '分隔的兩個 數字之間的間隔?

如果,關於如何建立一個查詢,允許我執行的任何建議 。

如果,你會推薦的任何方向?


其他信息

該網站是在WordPress的建立 - 且ItemNumber是一個自定義元場。 ATM我已經鉤入pre_posts補充道: - 也貼在了引擎收錄可讀性pastebin

$where .= " OR ID IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '%" . $wp_query->query_vars['s'] . "%' AND ({$wpdb->posts}.ID=post_id AND {$wpdb->posts}.post_status!='inherit' AND ( {$wpdb->posts}.post_type='produkt')))";

上面的代碼只是簡單地檢查,而該產品的元字段包含搜索字詞,不夠具體。


+0

是什麼意思「,以檢查有隔開的兩個數字之間的間隔 ' - ' 「?你能添加一個輸入和期望的輸出嗎? –

+0

鮑里斯,例2 - >數字與' - '分開。輸入可能是'1 - 4',輸出將是sql檢查搜索的字符串是否'1'' 2''3'或'4' –

回答

0

不可能在有意的非規範化數據庫上使用關係邏輯,比如邪惡的「Wordpress自定義元字段」方法。

所以,你能做的最好的是執行2個查詢:

  • 一個讓所有的數字
  • 然後展開PHP所有的時間間隔(以array_fill(),範圍()或其他)創建一個常規的逗號分隔的列表
  • 後者傳遞給第二查詢到()

作爲一個好處,你會得到更快的執行

+0

我正在考慮這一點,但有一種印象,即獲取所有產品+元(大約100+產品,每個產品都有大量的meta),然後使用PHP進行處理,與只通過SQL進行匹配相比,會減慢執行速度(?) –

+0

有**沒有通過SQL **匹配, t根本不在模式中使用SQL,而是使用鍵值存儲。所以,你必須遵循你選擇的相同的鍵值方法。你知道,一個人不能一次坐在兩把椅子上。 –

1

替換 「 - 」 與 「AND」 和使用BETWEEN關鍵字來獲取記錄:

當列名在100和110