2014-09-04 62 views
-1

IAM MySQL中的新手如何匹配存儲在MySQL表中的一列中的csv?

我已經CSV格式存儲的用戶的利益

說person_interests列存儲在人表中的多個利益,說

$row['person_interests']='11,22,33,44' 

利益表11 =音樂,22 =旅遊等

現在我想列出所有有興趣的11人,我應該在WHERE子句之後使用什麼?

SELECT * FROM persons WHERE ????? 
INNER JOIN 
interests 
ON 
persons.person_interest 
= 
interests.interest_id 
WHERE 
interest.interest_id=11 
+1

雖然@Barmar已經提到這個問題,我想強調的** **,這是一個不好的想法將多個值存儲在單個列中。 – Kermit 2014-09-04 00:31:00

回答

0

將逗號分隔的數據存儲在SQL表中是一個壞主意。你應該使用一個多對多的關係表來保存這個。它使得搜索和修改數據變得更加複雜,並且匹配值無法使用索引,因此查詢效率低下。

但是,如果您堅持使用它,您可以使用FIND_IN_SET來匹配它們。

SELECT * 
FROM persons AS p 
INNER JOIN interests AS i ON FIND_IN_SET(i.interest_id, p.person_interest) 
WHERE i.interest_id = 11 

而不是把所有的利益在一列的,你應該有一個關係表:

CREATE TABLE person_interests (
    person_id INT NOT NULL, -- Foreign key to persons table 
    interest_id INT NOT NULL, -- Foreign key to interests table 
    UNIQUE INDEX (person_id, interest_id), 
    INDEX (interest_id) 
); 
+0

Thankyou.would請你說爲什麼它的壞主意存儲在CSV?存儲這些數據的好例子? – tom 2014-09-04 00:43:44

+0

我已經添加了更多關於爲什麼這是一個壞主意的解釋,並且顯示你應該做什麼。 – Barmar 2014-09-04 00:49:43

+0

@tom您應該瞭解更多關於MySQL如何工作和關係數據庫的信息,並且您會理解爲什麼,您現在正在做的是如此糟糕和低效,以及如何利用數據庫的更多優勢,而不是過度思考困難的方式以您想要的方式獲取數據。 – Prix 2014-09-04 01:20:21

相關問題