0

最高のユーザーのために、ユーザーIDを個別のコンマでMySql TABLE入力します。Example : 1,2,3今、私PHP explode()はこの結果のために関数を操作します:

$bestuser = explode(',',$bestuser);

この行のユーザーのリスト用に別のMySqlTABLEがあります:id / name / datejoin/birthday...。

今、私はMySqlJOINメソッドで最高のユーザーの名前を印刷する必要があります。実際には、分解結果を他のMySqlTABLE結果と組み合わせる方法を意味します。

:このデザイン(1,2,3)が悪いことは知っていますが、選択の余地はありません。

4

3 に答える 3

1

これを行うには、SQL クエリを記述できます。

SELECT id,name
FROM user
WHERE id IN (:yourListOfIds)

リストが何らかの方法でユーザーによって提供される場合は、SQL インジェクションに注意してください。

于 2013-01-18T00:15:08.950 に答える
0

この質問を参照してください。ただし、マニュアルのコメントを見ると、多くの人が爆発について話していることがわかります。

于 2013-01-18T00:16:32.417 に答える
0

結合基準でMySQL の関数を使用できますFIND_IN_SET()

table_a JOIN table_b ON FIND_IN_SET(table_a.id_a, table_b.csv_a)

ただし (上記のコメントの警告に従って)、MySQL は両方のテーブルを完全にスキャンする必要があるため、この操作は非常に非効率的です。

はるかに優れた解決策は、関係のテーブルを作成することです。

CREATE TABLE relations (
  FOREIGN KEY (id_a) REFERENCES table_a (id_a),
  FOREIGN KEY (id_b) REFERENCES table_b (id_b)
) SELECT table_a.id_a, table_b.id_b
  FROM   table_a JOIN table_b
      ON FIND_IN_SET(table_a.id_a, table_b.csv_a);

ALTER TABLE table_b DROP csv_a;

次に、必要に応じてテーブルを結合して、必要なデータをクエリできます。

SELECT   table_a.*
FROM     table_a JOIN relations USING (id_a)
WHERE    relations.id_b = ?

必要に応じて、MySQL のGROUP_CONCAT()関数を使用して元の CSV を取得することもできます。

SELECT   table_b.id_b, GROUP_CONCAT(relations.id_a) AS csv_a
FROM     table_b JOIN relations USING (id_b)
WHERE    ...
GROUP BY table_b.id_b
于 2013-01-18T09:26:34.023 に答える