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

    私的良スレ書庫

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

    元スレMySQL 総合 Part18

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    701 : NAME IS - 2010/11/15(月) 18:33:19 ID:??? (-27,-30,-279)
    データベース設計について相談させてください。

    クーポンサイトの情報をWebapiから取得して、DBに登録したユーザーごとの
    条件にマッチすればメールでお知らせするプログラムを作っています。

    現在、 usersモデル、 alertkeywordsモデルと二つあります。
    一人のuserは複数のアラートキーワードを作成できます。

    この時、 ”同じクーポンを重複して同じメールアドレスに送らないようにしたいです。”

    WebAPIからそれぞれのクーポンのIDが取得できるので、
    新たに couponsモデルを作成し、  couponID、date、email、と3つのテーブルを作成。
    アラートメールを送信したクーポンのidはcouponsモデルにデータを保存する。

    毎回アラートメールを送信する前に、このモデルで以前にメールを送信したかどうか
    チェックするというやり方を考えたのですが、これよりもっと綺麗なやり方は
    あるでしょうか?

    (わかりにくくて申し訳ありません。指定していただければ説明を追加いたします。)
    702 : NAME IS - 2010/11/17(水) 10:10:48 ID:??? (-29,-30,-158)
    「mysql_insertid」って、auto_incrementなカラムじゃなくても使えるのでしょうか。

    ソーシャルゲームのためのMySQL入門
    http://engineer.dena.jp/2010/11/mysql-for-socialgame.html
    というページに

    ## sql
    CREATE TABLE `seq_log` (
    `id` bigint(20) unsigned NOT NULL
    ) ENGINE=MyISAM
    INSERT INTO seq_log VALUES (0);

    ## perl
    my $sth = $dbh->prepare_cached("update seq_log set id=LAST_INSERT_ID(id+1)");
    $sth->execute();
    return($dbh->{'mysql_insertid'});

    というコードがあったのですが、auto_incrementじゃないカラムに対してmysql_insert_idを使っているように見えます。
    707 : NAME IS - 2010/11/17(水) 22:01:18 ID:??? (+21,+28,-2)
    708 : NAME IS - 2010/11/18(木) 03:59:40 ID:??? (+30,+29,-29)
    >>707
    ありがとうございます。ぜんぶドキュメントに書いてあるんですね。出直してきます。
    709 : NAME IS - 2010/11/18(木) 17:54:31 ID:Gq4XALI6 (+0,+0,+0)
    600001,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    600002,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1
    600003,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    600004,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    上記のようなCSVファイルを作成し、インポートを行いました。
    すると、2番目以降のレコードは正常にインポートされて、selectでも検索出来るようになるのですが、
    1番目のレコードはインポートされません。インポート結果も「Records: 3 Deleted: 0 Skipped: 0 Warnings: 0」となっており、
    そもそも1番目にデータがある事を認識出来ていないようです。
    これにはどのような原因が考えられるでしょうか?
    宜しくご教示下さい。お願いします。
    712 : NAME IS - 2010/11/18(木) 19:11:06 ID:??? (-5,+2,-3)
    そりゃphpmyadminがそういうふうに作られているんでしょう
    713 : NAME IS - 2010/11/18(木) 19:18:12 ID:7RuA6Gxf (+24,+29,-17)
    暗黙のコミット 当たりの問題じゃないかと予想
    715 : NAME IS - 2010/11/18(木) 19:35:38 ID:??? (+25,+28,-46)
    プログラム上から、もしくは専用のGUIツールからならわかるが
    phpmyadminからトランザクションはれるってあんまりイメージ沸かないな、
    できないんじゃね?知らないけど。調べれ。
    716 : NAME IS - 2010/11/18(木) 19:49:50 ID:Cf2TFxy8 (-10,+29,-40)
    >>713
    暗黙のコミットって初めて聞きました。検索したらトランザクションが
    勝手に終了されると・・・関係ありそうなのでもう少し調べてみます。

    >>715
    実際の現場ではphpmyadminでトランザクションはつかわない
    みたいなんですね。
    718 : NAME IS - 2010/11/19(金) 14:39:21 ID:??? (-29,-30,-58)
    varchar型で1万文字以上格納できるようなんですが、
    text型と使い分ける目安はどの程度なんでしょうか?
    varcharに入るなら全部varcharに入れてしまった方がいいんでしょうか?

    入力される値は0文字から4000文字程度と仮定。
    MySQL-5.1.37でInnoDB使用。
    720 : NAME IS - 2010/11/19(金) 20:45:33 ID:lhdsvAaN (+8,+28,-2)
    >>719
    どういうミスだったの?
    721 : NAME IS - 2010/11/19(金) 21:58:23 ID:??? (-25,-30,-114)
    >>718

    http://dev.mysql.com/doc/refman/4.1/ja/blob.html
    ほとんどの面において、TEXT 型のカラムは、任意の長さに設定できる VARCHAR 型の
    カラムとみなすことができます。同様に、BLOB 型のカラムについては、VARCHAR BINARY
    型のカラムとみなすことができます。相違点は以下のとおりです。

    *MySQL バージョン 3.23.2 以降では、BLOB 型と TEXT 型のカラムには、インデックスを
     付けることができる。それより前の MySQL バージョンでは、インデックスはサポートしていない。
    *VARCHAR 型のカラムでは値の格納時に後続のスペースが削除されるが、
     BLOB 型と TEXT 型のカラムではこの削除は行われない。
    *BLOB 型と TEXT 型のカラムには、DEFAULT 値は設定できない。
    723 : NAME IS - 2010/11/19(金) 22:29:16 ID:??? (+24,+29,-98)
    >>722

    php mysql トランザクション でぐぐって
    http://redwarcueid.seesaa.net/article/140085587.html
    というのが出てきたんで見ると

    最後にトランザクションをはじめる準備というところはautocommitが1の場合は
    トランザクション中でも関係なくクエリが成功するとその場で
    コミットしてしまうので0にしてトランザクションを始めましょう
    注意しましょう

    とかってあるけど、そこらへんはどうなの?
    724 : NAME IS - 2010/11/19(金) 22:57:04 ID:??? (+24,+29,-87)
    >>721
    ありがとうございます。
    挙動の違いはだいたい理解できました。

    あとは、パフォーマンスの違いと、
    どう使い分けるのか、それとも一方に統一した方が楽なのかがイマイチ分かりません。
    726 : NAME IS - 2010/11/20(土) 00:00:30 ID:J6lwghrY (+0,+0,+0)
    質問です。MySQL5以降で、

    A
    | user_id | boolean |
    ---------------------
    | 1 | 0 |
    | 2 | 1 |
    | 3 | 1 |

    B
    | user_id | boolean |
    ---------------------
    | 2 | 0 |
    | 3 | 1 |

    U
    | user_id | name |
    ------------------
    | 1 | aaaa |
    | 2 | bbbb |
    | 3 | cccc |

    というA,B,Uというテーブルがあるときに、
    下記のようなデータを取得することは可能でしょうか?

    | name | A.boolean | B.boolean |
    --------------------------------
    | aaaa | 0 | null |
    | bbbb | 1 | null |
    | cccc | 1 | null |
    | bbbb | null | 0 |
    | cccb | null | 1 |
    728 : NAME IS - 2010/11/20(土) 01:17:58 ID:??? (+0,-29,-31)
    >>726
    各々、left outer joinしたものをunion allするしかあるまい
    片方は、必ずNULLになるわけだし。
    729 : 726 - 2010/11/20(土) 01:57:35 ID:??? (+0,+29,-37)
    >>728
    ありがとうございます!
    今まで遭遇しないタイプだったので、結合だけで、
    なんとかできないか試行錯誤してましたが
    UNION ALL で目的が達成できました!
    732 : NAME IS - 2010/11/22(月) 17:48:34 ID:??? (+30,+29,-52)
    ずっと前に、メールアドレスはREVERSEで反転して登録すると、
    インデックスとして使うときにいいって記事読んだ覚えがあるんですが、
    ソースが見あたりません。

    このテクニックについて参照できる記事をご存じのかたや、
    またご意見があるかたはお聞かせいただけないでしょうか。
    733 : NAME IS - 2010/11/22(月) 19:29:55 ID:??? (+27,+29,-8)
    えらくクセのある運用方法だな
    一概にいいとは言えないはずだけど・・
    734 : NAME IS - 2010/11/22(月) 20:41:36 ID:??? (+4,+6,-4)
    たしかにBTREEだったら逆のほうがよさそうだね。
    おもしろいw
    735 : NAME IS - 2010/11/22(月) 20:51:07 ID:??? (-29,-29,-73)
    あまりに初歩的な質問で悪いんですけどデータベースの初期化って
    mysql_install_db ですよね?
    OSはCentOSなんですけど、一度yum remove (ryでアンインストールした後、もう一度入れても初期化されてくて
    上のをやってみても初期化されてないのですけど、初期化のやり方間違ってますか?
    736 : NAME IS - 2010/11/22(月) 21:11:04 ID:??? (-25,-29,-97)
    >>735
    既存のデータベース/テーブルが存在する場合は、一切それらに手をつけない
    旨公式のリファレンスに書いてあるハズだが・・・。

    yum で removeっても、/var/lib/mysql 下はクリアされないハズなので、
    rm -rf で一旦消しましょう。
    (もちろん、以前に作成したユーザーや権限は全て失われるので、
     失いたくなければ他所にコピーするなりする)
    737 : NAME IS - 2010/11/22(月) 21:31:48 ID:??? (+24,+29,-5)
    >>736
    レスありがとうございます。
    公式のどこを見ればいいのかわからない程の初心者でして。
    スレ汚し失礼致しました。
    738 : NAME IS - 2010/11/23(火) 00:26:15 ID:??? (+27,+29,-8)
    あー確かに メールアドレス逆のが効率は良さそうね 確かにおもろいw
    739 : NAME IS - 2010/11/23(火) 08:48:16 ID:??? (-26,-29,-56)
    Macの各アプリなんかの環境変数(?)は開発者サイトのホスト名を逆にしたようなものをキーにしてるのは、同じようなもんなのかな?
    defaults write com.apple.xxxx true
    みたいな。
    740 : NAME IS - 2010/11/23(火) 21:47:39 ID:??? (-27,-29,-34)
    >>732
    ドメインで範囲検索する場合は有効かも知れんけどね。 like 'ten.hc2.%' とか。
    そうでなけりゃ、めんどくさいうえにキーの分離が悪くて効率落とすだけ。
    何にしても要件次第。
    741 : NAME IS - 2010/11/23(火) 23:17:43 ID:??? (-29,-30,-89)
    データベースの管理に、MySQL GUI Tools を導入したんですが
    セットの MySQL Queru Browser ではテーブル内の日本語データが
    文字化けしてしまいます。

    出来ればこの純正SETを使いたいので、日本語対応させたいのですが
    何か方法はありますか?
    743 : NAME IS - 2010/11/24(水) 03:27:34 ID:??? (-29,-29,-37)
    innoDBでINSERT IGNOREやINSERT ON DUPLICATE KEY UPDATEをしたとき、
    行が増えていないのにオートインクリメントが繰り上がってまう。

    すぐIDがパンクするんだけどこれって何とかならないかな。
    747 : NAME IS - 2010/11/24(水) 20:36:35 ID:??? (-26,-29,-104)
    正直使いやすいとはあまり思わないし、重いのだけど
    単なるクエリ実行から、GUIでテーブル作成/変更したり
    ユーザーの管理もできるようになってる
    utf8でしか使ってないけど、日本語も問題なさげ。

    最近MySQLを使うようになったから
    クエリブラウザと比べてどうというのはわからん
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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