2016-08-15 24 views
0

mapimplodeを使用して文字列を構成する多くのPHPの例が見つかりました...私はNodeとJavascriptを使用しています。私はIDの配列を持っていると私はこのようにそれを保存しています:保存されていますし、私は、クエリを実行しようとしているMySQLが別のテーブルのIDの配列に基づいて1つのテーブルから値を選択

[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には1つしかありません。 'ids'列は、table2の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のものではありません。 JSON_SEARCHは、文字列に変換するまで、idsへのパスのためにNULLを返し続けました。試行錯誤...