2011-04-12 65 views
0

我正在寫一個簡單的音樂家數據庫,它有一個搜索功能,當他們在數據庫中搜索特定的樂器時,會將音樂家的詳細信息通過電子郵件發送給他人。我有玩多個樂器的人,因此我有5個樂器,樂器,樂器2,樂器3,樂器4,樂器5。PHP/MySQL - Multiple Selects For Query

我對我的電子郵件功能有一個MYSQL查詢,但我無法讓它搜索多個表。

下面是代碼:

$query = "SELECT * FROM instruments WHERE (instrument, instrument2, instrument3, instrument4, instrument5) = '$search'"; 

我是不是傻我的語法或我要對這個錯誤的方式。

非常感謝。

+2

錯誤的數據庫設計 – 2011-04-12 11:48:21

+0

是的,需要有重新考慮你的數據庫。 – Xand94 2011-04-12 11:49:47

+0

我也這麼想! - 我認爲沒有辦法挽救我的設計,因爲除了這部分代碼以外,它確實有效! – Toby 2011-04-12 11:51:44

回答

0

你試過:

SELECT * 
FROM instruments 
WHERE '$search' IN (instrument, instrument2, instrument3, instrument4, instrument5) 

?我認爲這是你想要的。

但是一個真正的解決方案是用儀器創建一個單獨的表格,而不是爲相同的信息保留多個列。

你應該有一個與音樂家的桌子和一個儀器來持有一般儀器和他們的信息。而第三個(用於解決樂器和音樂家之間的多對多關係)只能保存音樂家ID和樂器ID。

下面是一些有用的鏈接:

+0

這聽起來很積極,我已經通過獨特的ID獲得了樂器和音樂家之間的關係,樂器本身在一個枚舉數據類型的長列表中,我將如何爲它們生成ID? – Toby 2011-04-12 12:00:35

+0

另外 - 感謝上面的代碼,它現在似乎做了竅門,這只是一個簡單的數據庫,我將在稍後處理數據庫規範化,因爲顯然看起來是一種更有效的方法。 – Toby 2011-04-12 12:02:53

+0

@Toby當沒有ID顯然可以使用自動增量。 – 2011-04-12 12:19:00

0

最好是使用2個表 - 音樂家與儀器。樂器表中的每一行都有一個字段'musician_id',它指的是相應的音樂家。這被稱爲1-N關係。

現在,當你要查詢的數據庫,你這樣做:

SELECT * FROM musicians m LEFT JOIN instruments i ON (m.id = i.musician_id) WHERE i.name = "Oboe"; 

該聯接兩個表一起,返回給你一排各種樂器的人玩。

或者,如果你已經知道的音樂家ID,僅查詢工具:

SELECT * FROM instruments WHERE musician_id = 123; 
+0

我已經有兩個表,人和儀器通過唯一ID鏈接,我只需要在儀器表中創建多個儀器 – Toby 2011-04-12 11:53:49

+0

好,然後第一個查詢應該完成這項工作(我編輯了一個例子)。從我拿的那個問題來看,你有5張桌子。 – Laas 2011-04-12 12:04:13