ホームページ  >  記事  >  データベース  >  mysql クエリ結果に複数列のスプライシング クエリを実装する方法

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

王林
王林転載
2023-06-01 23:40:052658ブラウズ

以前問題が発生しました。mysql データベースには 2 つのテーブルがあります。1 つのアドレス テーブルには、州、市、都市などの位置情報が格納されます。もう 1 つのユーザー テーブルには、アドレス テーブルの 3 つの位置情報に対応する 3 つのフィールドがあります。 (非常に奇妙なテーブル形式)、図に示すように:

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

次に、ユーザー テーブル内のデータをクエリする必要があります。ユーザーテーブルに基づいてデータを保存します。市街地の値については、対応する位置情報 (名前) を住所テーブルでクエリして表示します。

私は SQL に習熟していないので、一般的なロジック

まず、ユーザー テーブルの州と都市の 3 つのフィールドの値を取得する必要があります。一般的なクエリ メソッドは

SELECT province,city,district FROM `user` WHERE id =1;

です。これは比較的単純です。得られる結果は、図に示すように 1 行 3 列の値です:

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

これは通常の書き方です。この結果をクエリとして使用します。アドレス テーブル内の名前をクエリするための条件です。

もちろん、このアイデアは良いように思えますが、このクエリの結果は 3 つのセグメントに分割されており、後続のクエリには役に立ちません。結果を取得して、再度処理してクエリを実行するのは面倒です このとき、CONCAT_WS と CONCAT という 2 つの SQL 関数を使用する必要があります 2 つの関数の機能 結果を文字列に結合することです 具体的な使い方は Baidu で確認できますが、ここでは紹介しません:)

したがって、クエリ ステートメントは SELECT CONCAT_WS(',',province ,city,district) AS ids FROM ` のように書くことができます。 user` WHERE id =1;得られた結果は図に示すとおりです:

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

この結果を使用して、基本的にアドレス情報に関してクエリを実行できます。アドレス情報をクエリするときに対応するスプライシングも行ったので、最終的な SQL は次のようになります。

SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);

理想的な結果は図に示すとおりです。

mysql クエリ結果に複数列のスプライシング クエリを実装する方法

#しかし実際には、このステートメントは望む結果を得ることができません。その理由は、SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1 の結果は文字列ですが、文字列は取得できないためです。クエリ条件の In の条件として使用されるため、クエリ結果は望んでいたものではありません。

アイデアには問題はありませんが、どのように使用できますか? この文字列を次のように使用するにはどうすればよいですか?クエリ条件を入力して、最終的に必要な結果が得られますか? インターネット上の情報によると、 のクエリ条件の内容は数値のみであるため、文字列クエリはサポートされていないため、ここでは関数 instr も必要です。正直に言うと、この関数を初めて知りました。何しろ、mysql の追加、削除、変更、確認についてはほんの少ししか知りません(笑)。それでは、この関数の効果、つまり最後の SQL の結果を試してみましょう

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    (SELECT
      CONCAT_WS(',', province, city, district)
    FROM
      `user`
    WHERE id = 1),
    id
  ) ;

の実行も私たちが望んでいることです. もちろん、上記のステートメントはアドレスを検索した結果を実現するだけです. 詳細はビジネスのニーズに応じて変更できます. mysql の機能は次のとおりです本当に強力です。今後さらに学習する必要があります;

つまり、最終的な SQL は次のとおりです:

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    CONCAT(
      ',',
      (SELECT
        CONCAT_WS(',', province, city, district)
      FROM
        `user`
      WHERE id = 1),
      ','
    ),
    CONCAT(',', id, ',')
  ) ;

以上がmysql クエリ結果に複数列のスプライシング クエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。