2012-04-03 140 views
1

我已經爲我的數據庫設置了一個搜索功能來尋找兄弟姐妹的名字。我遇到了一個問題,因爲兄弟姐妹列在多個列中。我想知道是否可以使用帶有OR的WHERE查看數據庫中的3列或更多列。搜索多個列

這是我現在有

SELECT * FROM movie WHERE $dropdown_1 LIKE '%$search%'" 

dropdown_1可以是幾個不同的東西,包括兄弟姐妹,但我想,當在dropdown_1選擇的兄弟姐妹也將着眼於siblings_1siblings_2siblings_3siblings_4,看看名字匹配。

回答

3

這可能是考慮您的數據庫的Normalizing的時候了。

直接回答你的問題,你可以使用OR多個匹配

`siblings_1` LIKE '%search%' OR `siblings_2` LIKE '%search%' # etc... 

另外,如OMGPonnies在下面的評論中指出,使用UNION更快:

WHERE siblings_1 LIKE '%search%' UNION SELECT ... WHERE siblings_2 LIKE '%search%' # etc ... 

但我堅持,如果你仍然可以幫助它,重新設計你的數據庫:)。

+0

+1:我會使用一個'UNION',而不是'或'但另有約定。 – 2012-04-03 03:28:22

+0

@OMGPonies非常感謝,但我很好奇,如何使用'UNION'來重寫? :) – 2012-04-03 03:30:53

+0

'WHERE siblings_1 LIKE'%search%'UNION SELECT ... WHERE siblings_2 LIKE'%search%'...' – 2012-04-03 03:36:17

1

將列名放在用戶定義的變量中是一個壞主意,因爲它們可以在表中的任何位置進行搜索。

什麼你可能需要更像

SELECT * FROM movie WHERE `dropdown_column` LIKE '%$search%'" OR `sibling_column` LIKE '%$search%'" etc..