2013-04-08 55 views
0

所以這是我需要解決的問題:我的數據庫中的用戶正在遵循一定數量的課程。這些課程都是編號的,所以行courses的值可能爲12, 34, 5612或「'等。現在我正在執行搜索查詢以查找遵循某個課程的用戶。我想使用LIKE,但它似乎是一個不切實際的解決方案,因爲當時我有如下匹配它:使用php和mysql查找數據庫匹配

courses LIKE '$course,%' OR courses LIKE '%,$course,%' OR courses LIKE '%,$course' OR courses LIKE '$course'

由於有四種不同的方式來搭配,我希望有一個更好的解決方案,但我自己還沒有想過任何事情。任何人都有創造性的解決方案?非常感謝。

+0

那麼你是否試圖使用課程名稱或課程ID檢索數據? – Sabari 2013-04-08 08:19:03

回答

3

MySQL已經實現了一個名爲FIND_IN_SET(),搜索從逗號分隔值的值函數,如

SELECT * 
FROM TableName 
WHERE FIND_IN_SET('12', 'comma separated value') > 0 

考慮歸你表。將comman分離值存儲在單個列中是一個糟糕的主意。

+0

中搜索該值。 – 2013-04-08 08:23:08

+0

太棒了!正是我正在尋找的內容,我正要將來自符合'%$ course%'的ID的所有結果分解到數組中,並從那裏匹配它。幸運的是,我沒有浪費任何時間。謝謝!! – user1282947 2013-04-08 08:35:47

+1

@JW,很好的回答先生!很多向你學習! – 2013-04-08 08:36:32

-1

嘗試使用

WHERE courses IN (12,34,56); 
+0

這是數據庫中的值,如果您還有其他問題,他需要在某個課程 – CloudyMarble 2013-04-08 08:20:10

0

您可以在數據庫中添加另一個表course和一個更使鏈接coursesusers之間:

Users (id_user, name, ...) 
Courses (id_course, num_course, ...) 

userHasCourse (id_user, id_course) 

userHasCourse.id_useruserHasCourse.id_course是用戶和課程表的ID的外鍵。

您新能拿回所有課程信息爲每個用戶

SELECT Users.name, Courses.num_course FROM Courses JOIN userHasCourse USING id_course JOIN Users USING id_user ORDER BY id_user 

您將得到與所有用戶和相關num_courses陣列。 如果你想添加更多關於課程的信息(不止一個數字),這個解決方案可能是有用的