ホームページ  >  記事  >  バックエンド開発  >  複数の列に対応する 1 つの行に関する MySQL の関連クエリの問題と例と詳細な説明。

複数の列に対応する 1 つの行に関する MySQL の関連クエリの問題と例と詳細な説明。

WBOY
WBOYオリジナル
2016-06-23 13:49:16888ブラウズ

テーブルが 2 つあります

t1 テーブルには、id、city_id1、city_id2、city_id3 の 4 つのフィールドがあります

t2 テーブルには、id、city_name の 2 つのフィールドがあります

t1 テーブルの city_id1、2、および 3 は、すべて同じ ID です対応する t2 テーブル

例:

t1 テーブルには 1 つのレコード 1,26,29,50 があります

t2 テーブルには 3 つのレコードがあります
26 北京
29 上海
50 天津

さて、私の要件は次のようになりますSQL文でt1を調べて、city_id1,2,3に該当する都市を表示します 例
結果:1、北京、上海、天津

SQL文はどのように書けばよいでしょうか?ディスカッション (解決策) への返信

select id,  (select city_name from t2 where id=t1.city_id1) as city_name1,  (select city_name from t2 where id=t1.city_id2) as city_name2,  (select city_name from t2 where id=t1.city_id3) as city_name3 from t1

SQL Bamboo は、別の解決策について話しましょう ~

関数を作成し、静的変数 $city 配列を定義し、都市 ID をキーとして使用し、都市名を次のように使用します値

都市データがバックグラウンドで編集されるたびに、シリアル化された都市データ ファイル

システムの起動時に静的変数にファイルを読み取らせます

この関数は、都市 ID が渡されると、すぐにベースの都市名を返します$city で

静的変数であるため、1 回のリクエストで複数回呼び出すオーバーヘッドはありません。大きな点は、初期化のためにファイルを読み取る必要があることです
これにより、都市に基づいて名前を変換するニーズをすべて解決できますウェブサイトの ID


SQL Bamboo は、別の解決策について話しましょう~
関数を書いて静的変数 $city 配列を定義し、都市 ID をキーとして使用し、都市名を値として使用させます
毎回都市データはバックグラウンドで編集され、シリアル化された都市データのファイルが生成されます

システムの起動時に静的変数にファイルを読み取らせます

この関数は都市 ID を渡すと、$city に基づいて都市名をすぐに返します

静的変数であるため、1 回のリクエストで複数回呼び出すオーバーヘッドは高くありませんが、初期化にはファイルの読み取りが必要です
これにより、Web サイトで都市 ID に基づいて名前を変換するニーズをすべて解決できます


実際、私は今、バックアップ用にこのような都市配列を毎回見つけて、city_id を渡して都市名を取得します

あなたが言及した方法は、この配列をキャッシュすることと同等であり、非常に優れています



xu 大きなメソッドは次のようにすることができますmysql はこのマッチング関係を効率的に処理できると思いました~~~ 最初にキャッシュを使用することしかできないようです


実際、今ではバックアップ用にそのような都市配列を 1 つ見つけます。それを渡します city_id を入力して都市名を取得します

あなたが言及した方法は、この配列をキャッシュすることと同等です

より大きな方法は実装できますが、あまり効率的ではないようです。 mysql はこのマッチング関係を効率的に処理できると考えられていました。それぞれの利点は何ですか?
ひらめき、別のアイデア
都市名を出力する必要がある場合は、まず {CITY:123} の形式で記述します
ページの下部にある ob_get_clean では、正規表現を使用してこれらの情報を見つけ出し、重複する ID を削除し、この非反復 ID のセットに基づいてデータベースをクエリし、名前を置き換えます。このメソッドの消費量はもう少し多くなる可能性があります。 CPU は必要ありませんが、都市に関するデータベースの操作も一度に完了します。最終的には、まだ古い xu の方法を使用しているためです。テーブルは比較的小さいです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。