2016-08-15 51 views
0

我發現了許多使用mapimplode來構造它們的字符串的PHP示例......我使用Node和Javascript,我認爲這可能是問題所在。我有一組ID,我保存它是這樣的:MySQL從一個表中選擇基於來自另一個表的ID表的數值

[1, 2, 3, 4].join(); 

這就是被存儲,我試圖運行一個查詢:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (st.ids); 

因此,無論表中有一列的城市, table2有多個記錄,table1只有一個。表2中的'ids'列是TEXT類型。問題是它只是返回id爲1的行。如果我這樣做:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (1,2); 

我會得到第1和第2行。是什麼導致了這個問題?我試過[1, 2, 3, 4].join(', ');,這並沒有幫助。有什麼建議麼?

+0

y javascript標記? – Iceman

+0

@Iceman因爲我在使用Node.js並在保存之前使用Javascript修改了值 – denikov

+0

第一個建議不會存儲想要加入/使用查詢的連接字符串,因爲這會讓事情變得很痛苦!接下來,如果你打算這樣做,請查看拆分字符串方法,以便將字符串拆分爲表格,然後進行連接而不是進入。如果您不想拆分字符串,可以使用一些通配符搜索來僞裝它,但是有巨大的潛在問題,然後你也可以去動態SQL路徑。所有的方法建議不要存儲連接的字符串,如果你將它們用於這樣的目的。 – Matt

回答

0

我正在使用MySQL v5.7,所以我有權訪問JSON函數......我應該首先使用它。因爲我想它的工作原理解決的辦法是:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND 
JSON_SEARCH(st.ids, 'one', sr.id) IS NOT NULL; 

喜歡新的JSON支持功能......本書雖然它與它的注意事項。例如,數組中的ID必須是字符串,ID不能是int's。 JSON_SEARCH繼續返回NULL直到我轉換爲字符串的路徑。試驗和錯誤...

相關問題