2010-08-03 63 views
0

在一個表「合作伙伴」,我有一個字段「網站」,可以包含值像1,27,38,12MySQL請求在哪裏...在

然後,在一個網站的ID爲n °27,我想獲得與本網站相關的合作伙伴。

我嘗試這樣做: SELECT * FROM partners WHERE 27 IN (partners.sites)

它的工作原理,如果27是在字符串的開頭(如:27,1,128),但是如果27是在中間它不工作(如:1,27 ,38,12)

你有什麼想法來管理這個嗎?

謝謝。 西里爾

+1

您有一個包含逗號分隔值的字段?爲什麼? – Tomalak 2010-08-03 09:52:53

回答

3

看到FIND_IN_SET

+0

隱藏的解決方案 – AlexanderMP 2010-08-03 09:58:13

+1

是的,但它完全符合Cyril的要求。就像你指出的那樣,它應該作爲某種關係來實現。 :) – 2010-08-03 10:02:37

+1

@亞歷山大,我承認。這是一個醜陋問題的可怕解決方案。 – ceteras 2010-08-03 10:05:59

0
SELECT * FROM partners WHERE partners.sites like '%27%' 
+2

不,這也匹配127。 – Tomalak 2010-08-03 09:54:16

+0

如果有的話,就像這樣:'',',',partners.sites,',')像'%,27,%'' - 但這很可怕。 – Tomalak 2010-08-03 09:56:08

+0

的確,這不是一個好的解決方案 – Cyril 2010-08-03 09:56:50

1

手冊這沒有任何意義

爲什麼不 select * from partners where sites=27

或者您是否建議sites是一個包含CSV的varchar? 在這種情況下,從任何角度來看都是完全錯誤的。在數據庫中建立一對多的關係。

-1

假設網站在你查詢同一表中的字段,你可以試試這個:

SELECT * FROM partners WHERE sites LIKE %27; 

SELECT * FROM partners WHERE sites LIKE 27; 

運作的?

+0

LIKE不僅沒有幫助這種形式,而且它期望27是唯一的字符串(這消除了對LIKE的需要)或最後(爲什麼?) – AlexanderMP 2010-08-03 09:56:50

+0

真,這是一個已經很糟糕的解決方案,已經是一個混亂的問題。我不得不同意創建一對多的多對一關係。 – SimonDowdles 2010-08-03 10:05:25

1

您可能想要使用FIND_IN_SET()函數,因爲IN()函數不會期望以逗號分隔的字符串作爲參數。

這不起作用:

SELECT 27 IN ('1,27,5'); 
+------------------+ 
| 27 IN ('1,27,5') | 
+------------------+ 
|    0 | 
+------------------+ 

這工作:

SELECT FIND_IN_SET(27, '1,27,5') > 0; 
+-------------------------------+ 
| FIND_IN_SET(27, '1,27,5') > 0 | 
+-------------------------------+ 
|        1 | 
+-------------------------------+ 
1 row in set (0.00 sec) 
+0

+1,暫定。解決手頭的問題,但可以繼續使用非常糟糕的數據庫設計。我認爲真正要做的是擺脫CSV字段,並使用1:n關係表。 – Tomalak 2010-08-03 09:59:57

+0

@Tomalak:是的,我同意。 – 2010-08-03 10:01:49

0

我將不得不同意在使用的關係將不僅是更好的做法,但將優化您的數據庫請求的速度,以及,即使它不明顯,每一位都很重要。

因此,假設你有所謂的網站一個單獨的表,你可以做一個調用,比如如下:

SELECT * FROM夥伴其中PID IN(SELECT SPID從網站,SITEID = 27);然後

你的關係可能是這樣的:

------------------------------------- 
PARTNERS 
------------------------------------- 
pid  | some field | 
2   |   | 
------------------------------------- 

------------------------------------- 
SITES 
------------------------------------- 
spid  | siteid  | surl 
2   | 27   | http://... 
-------------------------------------