2017-07-18 86 views
1

我需要從MariaDB源查詢表。查詢包含多個字段的字段

有一個字段包含多個由逗號分隔的值,我不知道如何繼續。

這就是這種情況:

TABLE: Aphorisms_Categories 
Field: id 

TABLE: Aphorisms 
Field: categories 

問題相關的是,類別通常包含一個字符串如2,3,4,67

最初的開發者,我不知道爲什麼,決定不創建第三張表來表示新墨西哥關係。但是現在,對我來說,找出一種方法來檢索屬於類別3的所有格言是不可能的(例如)。

任何提示?

+0

它仍然是一個選項,添加額外的表並將值存儲在那裏?也許使用觸發器在額外的表中插入/更新這些值,同時保持您的php代碼大部分爲 –

+0

_有一個字段包含由逗號分隔的多個值聲音像一個糟糕的設計或只是錯誤的數據庫 – Clijsters

回答

0

Shirkam的答案是接近,但有一個問題:

如果3是在該領域,即「2,4,33,3」的第一個或最後一個類別,比 SELECT * FROM Aphorisms WHERE categories LIKE '%,3,%' 不會抓住它。如果您從LIKE子句中刪除逗號,則會在多位數類別中獲得誤報。

由於您使用MariaDB的使用: SELECT * FROM Aphorisms WHERE categories REGEXP '(^|,)3($|,)'

0

您使用前人的精力是這樣的:

SELECT * FROM Aphorisms WHERE categories LIKE '%,3,%

這將這樣的伎倆。

PS:有時,開發人員不想有太多的關係,所以傾向於集中注意力。有時它的有用,有時不是,就像你的情況一樣。

0

唯一的一個很好的解決辦法只能是一個通過你的責任強加作爲一個好的程序員:不僅提供了良好的PHP代碼,但也是一個很好數據庫設計。你現在有這個責任,不再是以前的開發者。

因此,我的建議不是嘗試應用find-category-id技巧,而是提供一個好的,可靠的數據庫設計。就像你已經在你的問題中提出的那樣

祝你好運!

+0

對於downvote (d)我的問題:請讓我知道您的降薪動機,以便我可以相應地更改我的答案。這樣我們可以共同爲本網站的持續改進做出貢獻。 – 2017-07-18 10:24:04

+0

不幸的是,我不能做你的建議。數據庫是我擁有的數據庫,我無法更改它。 –