• 締切済み
  • 困ってます

mysql3.23でテンポラリテーブルの使い方

mysql3.23で、以下のようなテーブルでリスト形式の番号を、対応する他のテーブルのデータにマッチさせて代入する方法を教えてください。 [テーブル1] 'id' | 'type' 1 | 1,2 2 | 1,3,5 3 | 2,4 [テーブル2] 'id' | 'name' 1 | red 2 | blue 3 | yerrow 4 | green 5 | pink [このように出力したい] 'a.id' | 'b.name' 1 | red,blue 2 | red,yerrow,pink 3 | blue,green サブクエリなど使えばできるのだと思いますが、 ずっとmysql3.23なので、今まではプログラム側でループさせて出力していましたが、 今回テンポラリーテーブルに挑戦しようと思ったので、テンポラリーテーブルを使って取得する方法があれば、ぜひやり方を教えてください。 お願いします。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数1
  • ありがとう数5

みんなの回答

  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

前提がひとつ テーブル1は、typeがカンマ区切りの文字列になっていますが これを正規化して id type 1 1 1 2 2 1 2 3 2 5 3 2 3 4 のようなデータの持ち方をしませんか? そうでない場合は、かなり非効率的な処理になりSQLでは高速な処理は期待できませんが・・・

共感・感謝の気持ちを伝えよう!

質問者からの補足

ありがとうございます。 このテーブル1は、実際は 番号(プライマリ/id) | 店舗名(固有のデータ) | 所属カテゴリー(リスト形式のtype) | 住所 のような列になっていて、たとえば店舗が複数のカテゴリーに属している時にtypeはリスト形式になります。そもそもこのようなデータの持ち方が多分、だめなのでしょうか。 プログラム側でループさせるときには、一店舗ごとにループして以下のようなsqlを発行して結果(その店舗の所属カテゴリー)を得ていました。 select * from テーブル1 left join テーブル2 on find_in_set(テーブル2.id,テーブル1.type)

関連するQ&A

  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL
  • MySQL5でキーがないテーブルの結合はできますか?

    MySQL5なのでサブクエリが使えるのですが、 A x Bのレコードを返したいのですがSQLで可能でしょうか? ■テーブルA a_id b_id 1 1 1 2 ■テーブルB c_id 1 2 ■期待する結果 a_id b_id c_id 1 1 1 1 2 2

    • ベストアンサー
    • MySQL
  • PHPデータベース・テーブルの移行

    PHPとMySQLを使ってサイト構築しています。 MySQLのデータベース「group_color」にはテーブル「pink」とテーブル「blue」があります。 サイトでログインしている会員ユーザーの情報が「pink」に入っていてユーザーが ”ブルーグループに変更する”というボタンを押すと、テーブルpinkに入っている情報がテーブルblueに移行するようにしたいのですが、PHPの表記はどのようになりますか? 「ログインしている会員の情報」を移行させたいです。 テーブルのフィールドは ・id ・name ・birthday となっています。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 3.23.59でのテンポラリテーブルの削除、補完機能について

    お世話になります。 server version: 3.23.59-nightly-20050301 上記バージョンのMySQL使ってシェルのコマンドプロンプトから mysql>CREATE TEMPORARY TABLE `test` (`name` VARCHAR( 255 ) NOT NULL); とテンポラリテーブルを作って mysql>DROP TEMPORARY TABLE test; そのテーブルを削除しようとすると ERROR 1064: syntax error near 'TEMPORARY TABLE test' at line 1 とエラーがでます。 これは仕様なのでしょうか? しかたがないのでいったん接続を閉じてテンポラリテーブルを消してますが server version: 4.0.18 で同じことを行うと正常に削除できます。 また、 server version: 3.23.59-nightly-20050301 だとselectと入力しようとして mysql>sele(タブキー) とやると補完されますが server version: 4.0.18以上だと だと補完されません。(フィールド名は補完できました) なにか設定などが必要なのでしょうか? よろしくお願いします。

  • MySQL + PHP 同じテーブルを対象にした複雑なクエリ

    こんばんは。 Mysql+php環境で、以下のようなテーブルを持っています。 ちょっと複雑な内容でクエリ結果を求めたいのですが、 うまい方法が見つからず、質問させて頂きます。 ―――――――――――――――― ▽ユーザーテーブル ―――――――――――――――― user_id |user_name 1 |タロウ 2 |ヨシコ 3 |シゲル 4 |マユミ ―――――――――――――――― ▽所有果物テーブル ―――――――――――――――― goods_id |goods_name |user_id 1 |パイン |1 2 |みかん |1 3 |メロン |1 4 |リンゴ |2 5 |みかん |2 6 |イチゴ |2 7 |グレープ |3 8 |イチゴ |3 9 |キウイ |3 10 |リンゴ |4 11 |みかん |4 12 |メロン |4 ―――――――――――――――― ▽出力したい条件 ―――――――――――――――― 自分(例えばマユミ)が所有している果物(goods)と、 いずれか同じものを持っている人(user)が 他に持っている果物(goods)を出したいが、 自分が既に所有しているものは除く。 ―――――――――――――――― 今回のデータと条件ですと、 同じものを持っているuserはタロウとヨシコで、 彼らが持っていてマユミが持っていない果物は 「パインとイチゴ」になります。 このような結果を出したいのですが、 これを出力するにはどのようなSQL文にすればよいでしょうか? 実際のデータはもっとレコード数が多いテーブルです。 サブクエリを駆使しても、どうも思った結果が出ず・・・ どうかお助け下さい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • mysqlテーブルから一つレコードを取得して変数に

    mysqlテーブルから一つレコードを取得して変数に はじめまして。仕事上必要で独学で勉強を始めましたが、行き詰ってしまったので教えてください。 mysql+phpにて以下のテーブル(tbl_ex)で、phpから、'test'のレコードを足がかりに、idの'001'を返して変数に代入する方法がわかりません。 tbl_ex +-------+-----------+ | id | account | +-------+-----------+ | 001 | test | +-------+-----------+ | 002 | sample | +-------+-----------+ accountのtestからidを抜き出すのに SELECT id FROM tbl_ex WHERE account = 'test'; という具合にやったのですが、それからどうidを変数にするのかわからず、 元から違っていて別の方法があるのかと疑問です。 結果、$id='001' というようにしたいです。 凡庸な質問なのかもしれませんが、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • MySQLで別テーブルでのSELECTでNULLの場合

    MySQLで以下のようなテーブルの場合 test_1 id name test_2 test_1_id name このような構造の場合、test_1からtest_2のselectでtest_1.id=test_2.test_1_idでjoinした場合に、 test_2にデータが存在していなかった場合、 test_1テーブルのnameを返すようなsqlはどのように記述すればよいでしょうか、、

    • ベストアンサー
    • MySQL
  • データバインドで生成したテーブルの行の色を変えたい

    データバインドで生成したテーブルの各行のセルの色を 各データが持っている色で表示したいと考えています。 以下のようなcsvとhtmlを作ってみたところ yamadaのセルをred、suzukiのセルをyellow、kondoのセルをblue と表示するところまではうまくいったのですが 次ページのtanakaがgreenではなくてredのままになってしまいます。 何か良い方法をご存知の方がいらっしゃいましたら教えてください! よろしくお願いいたします。 <a.csv> ----------------- name,color yamada,red suzuki,yellow kondo,blue tanaka,green ito,aqua saito,red nakanisi,yellow ota,blue isikawa,green naito,aqua nisino,red azuma,yellow <a.html> ----------------- <script type="text/javascript"> <!-- function chStyle() { for(i=0; i<3; i++){ gyo0[i].style.backgroundColor = td_color[i].value; } } --> </script> <body onload="chStyle();"> <TABLE DATASRC="#ID1" BORDER=1 DATAPAGESIZE=3 ID="table1"> <TR> <TD id="gyo0"><SPAN DATAFLD="color"></SPAN></TD> <TD> <SPAN DATAFLD="name"></SPAN> <INPUT TYPE="hidden"datasrc="#ID1" DATAFLD="color" id="td_color"> </TD> </TR> </TABLE> <BUTTON onclick="table1.previousPage()">BACK</BUTTON> <BUTTON onclick="table1.nextPage()">NEXT</BUTTON> <OBJECT classid="clsid:333c7bc4-460f-11d0-bc04-0080c7055a83" id="ID1"> <PARAM name="CharSet" value="shift-jis"> <PARAM name="DataURL" value="a.csv"> <PARAM name="UseHeader" value="true"> </OBJECT> </body> </html>

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL