のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,300人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレMySQL 総合 Part15

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    601 : NAME IS - 2009/02/25(水) 13:15:08 ID:??? (+0,+29,-3)
    >>597
    悩む前にやることがあるような気がする
    602 : NAME IS - 2009/02/25(水) 13:27:01 ID:??? (+0,-29,-9)
    >>597

    SELECT * FROM `table` WHERE `名前`='田中' OR `名前`='山田'

    じゃダメなのかな?
    603 : NAME IS - 2009/02/25(水) 14:43:14 ID:??? (+0,+29,-14)
    >>602
    ヒラが100人いたら100個連結するわけだね 頑張って
    604 : NAME IS - 2009/02/25(水) 22:20:11 ID:??? (+4,-30,-172)
    テーブル(A)からテーブル(B)のデータを取り除きたい

    テーブル(A)
    日付 | 点数
    ----------------
    2009/10/1 | 89
    2009/10/2 | 83
    2009/10/2 | 90
    2009/10/3 | 93
    2009/10/3 | 84
    2009/10/7 | 79
    2009/10/7 | 66
    2009/10/8 | 72
    2009/10/9 | 80

    テーブル(B)
    日付 | 点数
    ----------------
    2009/10/2 | 90
    2009/10/3 | 84
    2009/10/7 | 66

    テーブル(A)があり、そこからテーブル(B)のデータだけを取り除き、
    テーブル(C)のようにしたいのです。
    どなたかよろしくおねがいします。

    結果テーブル(C)
    日付 | 点数
    ----------------
    2009/10/1 | 89
    2009/10/2 | 83
    2009/10/3 | 93
    2009/10/7 | 79
    2009/10/8 | 72
    2009/10/9 | 80
    605 : NAME IS - 2009/02/26(木) 02:05:31 ID:??? (+32,+4,-7)
    取り除くって、削除? それとも、単にselectしたくないだけ?
    606 : NAME IS - 2009/02/26(木) 02:08:18 ID:??? (+3,-25,-11)
    ところで、mysqlって・・sennaとかいうやつ使わないと、全文検索ってまだ出来ないんでしたっけ?
    607 : NAME IS - 2009/02/26(木) 02:08:47 ID:??? (-5,-28,-2)
    ↑日本語の全文検索です。
    608 : NAME IS - 2009/02/26(木) 07:15:04 ID:??? (-1,-29,-13)
    >>606
    できないか?というと、like '%ほげ%' とかでできなくもない。
    けど速度の面で現実的ではない。
    609 : NAME IS - 2009/02/26(木) 11:07:12 ID:??? (-1,-29,-27)
    >>604
    バージョンは?
    EXCEPTもMINUSも使えないなら、NOT EXISTS か NOT INで
    610 : NAME IS - 2009/02/26(木) 19:31:13 ID:??? (+4,-30,-260)
    FAQかも知れませんけどご存知の方がいたらご教示下さい。

    OS Windows2000Pro SP4
    mysql Ver 14.14 Distrib 5.1.30, for Win32 (ia32)

    コマンドプロンプトでmysqlを実行すると日本語のカラムの表示が文字化けします。

    ServerとClientのキャラクタセットが違っていると文字化けが発生するそうですが
    statusの出力結果は

    Server characterset: cp932
    Db characterset: cp932
    Client characterset: cp932
    Conn. characterset: cp932

    とServerとClientのキャラクタセットは同じになっています。

    ちなみに化けるのはコマンドプロンプトでmysqlを実行した時だけで
    MySQL Query Browserやコマンドプロンプトでmysqldumpを実行した時は
    正しく表示されます。

    何が悪いのしょうか?
    611 : NAME IS - 2009/02/27(金) 01:23:36 ID:b9B0cCFt (+21,+11,-228)
    MySQLのライセンスについて質問です

    Linxu,Apache,MySQL,PHPの環境を商用利用する場合、
    GPL汚染だのなんだの言われている関係で
    Enterpriseライセンス購入して使用するのが無難と言われていても、
    法的に罰することが確実に出来る訳ではないという解釈でよいですか。

    つまり、Sunが商用利用の場合はライセンス買えといっていても
    community版を使用していればSunのルールに多少引っかかってても
    現時点では明確でないしライセンス費用を払う義務は
    発生しないのかなと考えています。
    発生するのが明確になった段階でライセンスを買えば良いのかなと

    調べれば調べるほど良く分からなくなるんで誰かアドバイスください。
    ちなみに、mixiなどでは購入しているのかなど
    事例ベースで教えていただけると助かります・・・。

    612 : NAME IS - 2009/02/27(金) 01:34:37 ID:??? (+5,-30,-74)
    >>610
    show create table テーブル名\G
    で、テーブルやカラムの charset を確認してみては?

    あとは、select hex(カラム名) from テーブル名 とかで、
    本当に自分が思っている文字コードで文字が格納されているか確認するとか。
    613 : NAME IS - 2009/02/27(金) 12:29:34 ID:??? (+57,+29,-70)
    レプリケーションって・・どのくらいパフォーマンス下がるんですか?
    もしパフォーマンスに影響が出ないなら、バックアップとして使おうかなと思ったりしているんですが…
    614 : NAME IS - 2009/02/27(金) 16:42:12 ID:??? (+57,+29,-5)
    更新の量次第だけど、たいしたことないよ。
    615 : NAME IS - 2009/02/27(金) 18:03:43 ID:??? (+4,-30,-102)
    最大値や最小値だけでなく、2番や3番の値も取得したい

    テーブルA
    名前|受けた月|点数
    ------------------
    佐藤|1月|520
    佐藤|3月|584
    佐藤|7月|598
    佐藤|9月|556
    佐藤|11月|645
    田中|1月|490
    田中|3月|480
    田中|7月|400
    田中|9月|441
    田中|11月|477

    佐藤と田中のベスト3の点数を↓ように出力させたいんです。
    max(点数)で1番の点数を表示させるのはできたんですが、
    2番3番が上手くいきません。

    名前|1番|2番|3番
    ----------------
    佐藤|645|598|584
    田中|490|480|477

    バージョンはMySQL5.0です。
    616 : NAME IS - 2009/02/27(金) 19:31:17 ID:??? (+3,-30,-93)
    2つのクエリで、php等でループさせれば出来ますね。

    クエリ1
    select distinct 名前 from table A;

    クエリ2
    select score from table A where 名前 = クエリ1 order by score DESC limit 3;

    1つのクエリでも出来るんでしょうね。私はやり方知らないけど・・・orz
    617 : NAME IS - 2009/02/27(金) 19:51:26 ID:??? (+5,-30,-206)
    >>615
    なんか・・できたっぽい・・ちょっと乱雑ですが・・・

    select distinct tableA.name, max(a.score), b.score, c.score
    from tableA left join tableA as a on(tableA.name = a.name) left join tableA as b on(tableA.name = b.name) left join tableA as c on(tableA.name = c.name)
    where b.score = (select score from tableA where b.name = tableA.name order by score desc limit 1,1) and c.score = (select score from tableA where c.name = tableA.name order by score desc limit 2,1)
    group by tableA.name;

    tableAはテーブル名に置き換えて、nameは名前に・・scoreは点数です。
    618 : NAME IS - 2009/02/27(金) 19:59:28 ID:??? (+65,+29,-29)
    >>611
    GPL汚染って理解していないんじゃないかな。
    GPLライセンスでも利用する自由はある。
    ただ改造したりリンクするプログラムを
    つくったらソースを公開する義務が
    発生するだけ。ライセンスをもっと勉強
    しようよ。
    619 : NAME IS - 2009/02/27(金) 21:06:37 ID:??? (+0,-30,-52)
    >>617
    すごい、できました。
    ありがとうございます。

    でも、できれば↓のように2回しかテストを受けていない人がいる場合、
    NULLもしくは空白になるようにお願いしたいんです。

    鈴木|3月|684
    鈴木|11月|677

    (出力)
    名前|1番|2番|3番
    ----------------
    佐藤|645|598|584
    田中|490|480|477
    鈴木|684|677|NULL
    620 : NAME IS - 2009/02/27(金) 21:43:15 ID:ul7MM1le (+29,+29,-16)
    >>619
    IF文かなにか使えば出来ると思います。
    IF文 MYSQLで検索
    ここから先は自分で頑張って見てちょ
    検索+研究が一番身につくよ…がんばって
    622 : NAME IS - 2009/02/27(金) 21:53:29 ID:??? (+8,-30,-97)
    体裁をちょっと間違ったので再掲。

    select
     A.NAME as NAME,
     max(A.SCORE) as SCORE_1,
     max(B.SCORE) as SCORE_2,
     max(C.SCORE) as SCORE_3
    from
     SCORE as A
     left join SCORE as B on A.NAME = B.NAME and A.SCORE > B.SCORE
     left join SCORE as C on B.NAME = C.NAME and B.SCORE > C.SCORE
    group by A.NAME
    623 : NAME IS - 2009/02/27(金) 22:16:28 ID:ul7MM1le (+28,+29,-21)
    >>622
    それだとスコアが100点を2回取った人が一回しか表示されなくないですか?
    624 : NAME IS - 2009/02/27(金) 22:23:42 ID:??? (+12,-30,-113)
    そう言う仕様なら。

    select
     A.NAME as NAME,
     max(A.SCORE) as SCORE_1,
     max(B.SCORE) as SCORE_2,
     max(C.SCORE) as SCORE_3
    from
     SCORE as A
     left join SCORE as B on
      A.NAME = B.NAME and
      A.MONTH != B.MONTH and
      A.SCORE >= B.SCORE
     left join SCORE as C on
      B.NAME = C.NAME and
      A.MONTH != C.MONTH and
      B.MONTH != C.MONTH and
      B.SCORE >= C.SCORE
    group by
     A.NAME
    625 : NAME IS - 2009/02/27(金) 22:34:37 ID:??? (+59,+29,-31)
    >>624
    なるほど・・・それにしてもきれいな書き方ですね。
    join構文で条件を複数指定出来るって知りませんでした。
    勉強になりました。
    627 : NAME IS - 2009/03/01(日) 15:22:30 ID:??? (+57,+29,-4)
    MySQLのスレで聞いたって答えは決まってるだろう
    629 : NAME IS - 2009/03/02(月) 09:35:33 ID:??? (+0,-29,-26)
    普通に便利だよ。
    ちなみにOSS版でもフォワードは*.sql吐けばいいし
    リバースもmysqldump --no-dataの出力を読めるので、
    実は商用版いらなかったりするのはここだけの話。
    630 : NAME IS - 2009/03/02(月) 10:31:15 ID:??? (+3,-30,-42)
    SELECT * FROM table WHERE C = 1;
    のようにC が 1を全部参照できるのはいいのですが
    これをあえて、C = ALL みたいにして、
    SELECT * FROM table
    と同じ振舞いをするようにしたいです。
    そういった方法があればよろしくおねがいします。
    631 : NAME IS - 2009/03/02(月) 10:35:41 ID:??? (+17,-18,+0)
    C = C
    632 : NAME IS - 2009/03/02(月) 10:39:28 ID:??? (+59,+29,-3)
    >>631
    なんと!
    それでできるのですか
    さっそく試して見ます!!
    633 : NAME IS - 2009/03/02(月) 10:40:24 ID:??? (-5,-28,-2)
    CがNULLのときはだめだよ
    634 : NAME IS - 2009/03/02(月) 10:46:29 ID:??? BE:404158638-2BP(258) (+60,+29,-6)
    >>631,633
    なるほど、一応null値は入れないデータなので、
    今やってみたところ思い通りの操作ができました
    ありがとうございました!
    635 : NAME IS - 2009/03/02(月) 10:58:33 ID:??? (-6,-29,-1)
    おれは 1 = 1 でやるけど
    636 : NAME IS - 2009/03/02(月) 11:30:52 ID:??? (+56,+28,-5)
    C = までは確定なんでしょう。
    インジェクションの的だけどな。
    637 : NAME IS - 2009/03/02(月) 13:09:24 ID:??? (+58,+30,+0)
    638 : NAME IS - 2009/03/02(月) 13:42:58 ID:??? (+2,-29,-97)
    >>629
    MySQL Workbenchの商用版、稼働中のMySQLサーバに直接接続しての
    リバース/フォーワードエンジニアリングや同期ができるのって
    やっぱりsql文を経由して同期するよりも便利・ミスが少ないかなあ
    って思いました。それが理由で購入するってのもありですよね?
    639 : NAME IS - 2009/03/02(月) 13:56:04 ID:??? (+56,+28,-26)
    そりゃもちろんありですよ
    ER/Winとかより遥かに安いしね

    いまのところ日本法人のサポートが
    超優秀なのも加点ポイント
    641 : NAME IS - 2009/03/02(月) 23:33:15 ID:??? (+3,-30,+0)
    >>612
    レスが遅れましたがアドバイスありがとうございます

    テーブルやカラムにはcharsetを指定していませんがデータベースのcharsetをcp932に指定しています。
    「select column_name,character_set_name from information_schema.columns」を実行すると
    カラムのcharcter_set_nameにはcp932が設定されています
    select hex(カラム名) from テーブル名も試してみていますがcp932(シフトJIS)で格納されています。

    説明不足でしたが、mysqlの起動時に--t=hogeを指定しsqlの実行結果をテキストファイル
    に落とすときちんと出力されているんです。
    例えばデータが「あいうえお」だとテキストファイルには「あいうえお」と出力されているのですが
    コマンドプロンプトの画面には「、ヲィ」と表示されるのです。
    あいうえおはシフトJISだと82a0・82a2・82a4・82a6・82a8ですが
    2バイト文字として認識されず2バイト目の文字だけが表示されているようです。

    もう少し調べてみますが心当たりがあれば教えていただけると助かります。
    642 : NAME IS - 2009/03/03(火) 16:29:39 ID:??? (+3,-29,-61)
    641です

    mysqlをバージョンダウン(5.1.30→5.0.77)したところ日本語の文字化けが直りました。
    5.1.30はOSをXPにしても同じ現象が発生するのでmysqlのバグかもしれません。

    アドバイスを頂いた方、ありがとうございました。
    643 : NAME IS - 2009/03/03(火) 18:52:09 ID:??? (+45,+22,-2)
    644 : NAME IS - 2009/03/04(水) 12:15:14 ID:??? (+3,-30,-121)
    phpMyAdmin使ってる人・・・

    Googleでログインされた状態のページが検索結果に出てるって知ってた?
    これ・・セキュリティー上かなりヤバいので、自分のサイトが載ってないかチェックをお勧め

    Googleで下記を入力して検索
    intitle:phpMyAdmin "Welcome to phpMyAdmin***" "running on * as root@*""

    くれぐれもいたずらはしないように!!!
    645 : NAME IS - 2009/03/04(水) 15:43:15 ID:??? (+5,-30,-149)
    2つのテーブルからデータをとる場合でどちらかのテーブルに該当するレコードがあったら返してほしいのですが、どちらが空の時返してくれません。
    left join だとleftのテーブルにない場合(rightには該当レコードあり)空が帰ってきます。

    select name from dog left join cat on where dog.category = cat.category and sex = 1
    where dog.category = 1;

    どちらかが空でないときカラムをかえしてもらうにはどうかけばいいでしょうか?
    646 : NAME IS - 2009/03/04(水) 16:03:04 ID:??? (+3,-30,-170)
    切ないことにMySQLではFULL OUTER JOINがサポートされていない。
    なのでLEFT OUTER JOINで書いたクエリとRIGHT OUTER JOINで
    書いたクエリをUNIONするしかない。二度手間。
    今も昔も標準SQLのサポートが半端なMySQLを選んだ我が身の不幸
    を恨むがよい~

    あとJOINをする必要(結果テーブルの中でdogのカラムとcatのカラム
    を横に並べる必要)は本当にあるのかな?
    単にdogテーブルとcatテーブルからcategoryが指定値の行を検索
    するだけで良いのであれば単にUNIONするだけで良いと思う。
    647 : NAME IS - 2009/03/04(水) 22:30:22 ID:??? (+57,+29,-11)
    mysqlツールで何がお勧めですか?
    見やすくてできれば日本語でわかりやすいものがいいんですが
    648 : NAME IS - 2009/03/04(水) 23:10:16 ID:??? (+58,+29,-23)
    >>645
    テーブルをサンプルとして例を挙げないと、何をしようとしているか分かりづらい
    構文は色々な書き方があるから、やり方はあるはずだよ
    650 : NAME IS - 2009/03/05(木) 04:56:47 ID:??? (-5,-29,-23)
    >>649
    それはDB本体じゃなくてsqlplusの機能だよね
    で、mysqlコマンドにはないと思う
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について