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

    私的良スレ書庫

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

    元スレMySQL 総合 Part13

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1064 + - limit + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    451 : NAME IS - 2008/03/27(木) 23:40:57 ID:??? (+56,+27,-3)
    数値と文字列比べちゃダメでしょ。
    452 : NAME IS - 2008/03/27(木) 23:45:22 ID:??? (+6,-29,-8)
    とりあえず、
    SELECT cast('hoge' as signed);
    を実行してみればいいと思うよ。
    453 : NAME IS - 2008/03/27(木) 23:51:10 ID:??? (+11,-30,-157)
    その場をしのぎたいだけなら、idを文字列にキャストして比較すればいいよ。

    SELECT * FROM users WHERE cast(id as char(11)) = 'うんこ';

    でもこれだと、idにインデックスが張ってあっても
    インデックスが使われないかもしれない。

    というか、列にindexとidがあるのがそもそもおかしい。
    普通、indexなんて名前付けずに、idにして、
    idはnameとかuserとかにして、varcharとかcharにするのが普通じゃないかな。

    CREATE TABLE Users (
    id int(11) UNSIGNED NOT NULL AUTO_INCREMENT
    , user_name char(11) NOT NULL DEFAULT '0'
    , pw varchar(40) NOT NULL
    , PRIMARY KEY (id)
    );
    454 : NAME IS - 2008/03/28(金) 10:38:32 ID:??? (+7,-29,-152)
    >>451
    数値に対して文字列で比較しても、そもそも型自体が異なるので絶対合致しないもの、と思っておりました。
    しかし何故か0のものが抽出されてしまった為、疑問に思いました。

    >>452
    実行してみました。0が返ってきました。
    要するに、数値型のカラムに対して文字列で比較しようとすると、
    mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
    その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?

    >>453
    ありがとうございます。
    期待した通りの結果が返ってきました。
    >indexとidがあるのがそもそもおかしい
    こちら当方も感じました(他の方が作ったものの修正をしています)。
    あと、CREATE TABLE で主キーに UNSIGNED を付ける辺り、なるほどと思いました。
    大変勉強になりました、ありがとうございます。
    455 : NAME IS - 2008/03/28(金) 12:57:05 ID:??? (+5,-19,-51)
    MySQLのコマンドラインツール(mysql.exe)のログを取る方法はありませんか?
    一度に大量のSQLスクリプトを実行するとログが流れてしまって、
    エラーが出ていても気づかないということがあるんです。
    456 : NAME IS - 2008/03/28(金) 13:01:59 ID:??? (+2,-29,-17)
    リダイレクトしてファイルに落とせば?
    457 : NAME IS - 2008/03/28(金) 13:07:56 ID:??? (+3,-29,-73)
    >要するに、数値型のカラムに対して文字列で比較しようとすると、
    >mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
    >その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?

    型が違うと、いちど失敗してから変換が発生するから、
    明示的に変換するのに比べてオーバーヘッドが発生することだけ頭の片隅にでも置いておけば、
    その理解で大体OK
    458 : NAME IS - 2008/03/28(金) 13:52:28 ID:??? (-1,-30,-23)
    >>456
    mysql -u username -p database < hoge.sql 1>>log.txt 2>>err.txt
    でいけました!ありがとうございました。
    459 : NAME IS - 2008/03/28(金) 14:14:57 ID:??? (+9,-29,-73)
    http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
    あなたが使用している PHP, MySQL のライブラリ(libmysql.dll, libmysqlclient)
    の標準キャラクターセットは何かご存じですか?

    とありますが、標準キャラクターセットを調べる方法はあるのでしょうか?
    460 : NAME IS - 2008/03/28(金) 15:19:09 ID:??? (+3,-30,-98)
    正規表現の置き換えはできますでしょうか?
    イメージとしては以下のような感じです。

    hogeテーブル(id=1)のnameに'A([0-9]+)'があった場合、
    (SELECT rep FROM rep_table WHERE id=$1)
    と置き換える
    A1の場合だと(SELECT rep FROM rep_table WHERE id=A1)

    よろしくお願いします。
    461 : NAME IS - 2008/03/28(金) 15:40:00 ID:??? (+9,-30,-68)
    正規表現使いたいときも確かにあるが、
    その例の場合単に第一正規化されてないだけじゃ?
    idを分割すればそういうのも簡単に実現できるだろ。

    SELECT rep FROM rep_table R
    WHERE EXISTS (
    SELECT * FROM hoge H WHERE H.kind = 'A' AND H.id = R.id)
    AND R.kind = 'A';

    みたいな。
    462 : NAME IS - 2008/03/28(金) 15:56:00 ID:??? (+4,-30,-109)
    >>461さん
    レスありがとうございます。

    hoge.nameにはA1A3...見たいな感じでA([0-9]+)に複数マッチする可能性があります。(1つもマッチしない場合もあります)
    それらすべてを(SELECT rep FROM rep_table WHERE id=$1)の形でとりたいのです。
    現状ではプログラム側で、マッチした場合、そのつどSELECTで取得しています。
    preg_replace_callback('/A([0-9]+)/','_preg_rep',$query);
    function _preg_rep($matches) {
    $sql =
    "SELECT rep FROM rep_table WHERE id='$matches[1]'";
    ..
    }
    わかりづらい質問ですみませんがよろしくお願いします。
    463 : NAME IS - 2008/03/28(金) 16:01:21 ID:??? (+62,+29,-54)
    意図が伝わらなかったかな。
    要は、テーブル定義(というか設計)見直せば?ってこと。
    正規表現を使わなくても、テーブルさえちゃんとしてれば
    461で示したSQLで実現できるよね?

    もし変更が不可能だとしても、
    idから部分文字列を切り出すとかすれば十分実現可能。
    464 : NAME IS - 2008/03/28(金) 16:04:00 ID:??? (+54,+26,-60)
    どうしても正規表現が使いたいなら、
    http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
    ここを参考にすればいい。
    でも、正規表現はそこそこ重い処理だから、
    RDBMSでは極力使わないほうがいい。
    465 : NAME IS - 2008/03/28(金) 17:53:51 ID:??? (+4,-30,-101)
    >>459
    PHPでmysqldに接続して(mysqld側の起動オプションで、charset絡みを何も指定せずに)
    show variables like '%char%' ;

    で、clientとconnectのところ。
    466 : NAME IS - 2008/03/28(金) 20:02:50 ID:t4tLBd+a (-21,-18,+1)
    >>455
    tee
    467 : NAME IS - 2008/03/28(金) 22:31:08 ID:??? (-4,-29,-8)
    >>466
    tee log.txt でコンソールに表示されるログがすべて記録されるんですね。ありがとうございます。
    468 : NAME IS - 2008/03/29(土) 00:05:43 ID:??? (-1,-29,-9)
    % mysql hogehoge | tee log.txt
    469 : NAME IS - 2008/03/29(土) 12:17:05 ID:??? (-1,-29,-10)
    % mysql hogehoge | tee -a log.txt
    470 : NAME IS - 2008/03/29(土) 23:35:55 ID:3fgyplCn (+9,+19,+0)
    471 : NAME IS - 2008/03/31(月) 05:40:50 ID:0Cxuk5my (+34,+29,-83)
    同一テーブルをサブクエリでselectしてdelete出来ないので
    テンポラリテーブルを使おうと思いますが、
    テンポラリテーブルを削除する前に
    何らかの形で操作側のプロセスが死んだ場合、
    テンポラリテーブルだらけになるんじゃないかと思うのですが、
    そのあたりはどうなってるのでしょうか?
    472 : NAME IS - 2008/03/31(月) 11:24:38 ID:??? (+2,-29,-9)
    >>471
     接続が終了するとDROPされるから問題ないんじゃね?
    http://dev.mysql.com/doc/refman/5.1/ja/create-table.html
    475 : NAME IS - 2008/04/01(火) 10:38:18 ID:??? (-7,-30,-61)
    >>473
    show variables like 'tmpdir';
    デフォルトは確か /tmp
    作られるのは最適化されていないクエリを発行した場合
    476 : NAME IS - 2008/04/01(火) 10:40:09 ID:??? (-2,-29,-5)
    >>475
    mysqlというよりかは、DBIの問題じゃね?
    477 : NAME IS - 2008/04/01(火) 10:40:47 ID:??? (+41,+24,-11)
    ↑ おっと、>>474 へのレスだ
    478 : NAME IS - 2008/04/01(火) 11:16:33 ID:??? (-7,-29,-7)
    >>474
    DBD::mysqlのバージョンが違うからたぶんそれだな。
    バージョン合わせるわけにはいかんの?
    480 : NAME IS - 2008/04/01(火) 16:12:32 ID:??? (+3,-29,-47)
    perl/php などのスクリプトに接続IDとパスを書いて
    そのmysql、この場合はlocalhostみたいだから鯖にphp置いてそこから
    接続にいく感じ
    ftpはそういうスクリプトを上げるときにつかうけど
    mysqlにつかうときはバックアップを取るときくらいか
    481 : 使ってるのはPy - 2008/04/01(火) 19:10:39 ID:??? (+63,+30,-263)
    ここでいいのかよくわかりませんが、疑問・質問等のスレッドがなかったのでここに書きます。使っているのはMySQLなのでここに書きますがデーターベース全般についてです。

    ユーザー
    +名前
    +役割(役割テーブル)
    役割
    +名前
    +説明

    のように作る場合に役割を別のテーブルとして定義するとします、これは理解できるのですが。


    +住所
    住所
    +都道府県
    +市町村とかそれ以外

    のようにデーターベースでは分けるでしょうか?
    Pythonのようなオブジェクト指向言語で組み立てれば「駅」オブジェクトは「住所」インスタンスを持つことになると思うので、このようなテーブル構造を思いついたのですが「駅」には固有の「住所」しか当てはまらないので別テーブルにする利点が無い。
    「住所」なんてテーブルだと「家」というテーブルを作ったときにこのテーブルからも「住所」を参照することになって「住所」テーブルには「駅」「家」二つのテーブルの住所が記録されることになって美しくない。このような場合どのようにするのがベストでしょうか?
    乱文・長文で失礼いたしました、気に触ったらスルーしてください。
    482 : NAME IS - 2008/04/01(火) 19:48:45 ID:??? (+94,+29,-59)
    とりあえず、リレーショナル理論とか正規化について勉強すれば?
    RDBMSとかSQLは、オブジェクト指向だとか、
    手続き型だとかとは全然違うことがわかると思う。
    483 : NAME IS - 2008/04/01(火) 20:36:08 ID:??? (+75,+29,-30)
    >482
    ここまでオブジェクト指向とにていると、どうしてもそれで考えてしまいますorz
    おっしゃるとおり、やはりデーターベースの考え方をしっかり学んだほうがいいようですねorz
    http://www.oreilly.co.jp/books/database/
    のものを読んでみようと思います。ありがとうございました。

    485 : NAME IS - 2008/04/01(火) 22:21:36 ID:??? (+52,+29,-1)
    そこでなぜ引用符をつける。
    487 : NAME IS - 2008/04/01(火) 22:30:35 ID:??? (+3,-30,-42)
    SELECT hoge FROM Nanika WHERE test BETWEEN 100 AND 1000;

    SELECT N1.hoge FROM Nanika N1
    WHERE N1.test NOT IN (
    SELECT N2.test FROM Nanika N2
    WHERE 100 AND 1000
    );

    ・・・ごめんなさい。

    SELECT hoge FROM Nanika WHERE test < 100 OR test > 1000;
    488 : 484 - 2008/04/01(火) 22:47:34 ID:??? (-2,-30,-12)
    すみません、単純に
    test NOT BETWEEN '100' AND '1000'

    で、目的の結果を得ることが出来ました。お騒がせしました。
    489 : NAME IS - 2008/04/02(水) 11:15:13 ID:??? (-6,-30,-172)
    >>486
    ChangeLogのこれかな。

    2003-06-22 Rudy Lippan <rlippan@remotelinux.com> (2.9002)
    * Changed the default behaviour of mysql_found_rows, so now
    'UPDATE table set field=?' will return the number of rows matched
    and not the number of rows physically changed. You can get the old
    behaviour back by adding "mysql_found_rows=0" to the dsn passed
    to connect.
    490 : NAME IS - 2008/04/03(木) 16:45:12 ID:??? (+18,-29,-29)
    mysqlをインストールして適当にデータを入れてみたのですが、このデータをhtml上に呼び出すのってどうすればいいのでしょうか?
    491 : NAME IS - 2008/04/03(木) 16:47:14 ID:??? (+47,+29,-13)
    これまた大味な
    492 : 490 - 2008/04/03(木) 16:54:27 ID:??? (+56,+28,-16)
    SQLでselectしてデータを取り出すというのは分かるのですが、それをどうやったらページ上に表示できるのかなぁと
    javascriptみたいにhtml上に直接かけるわけでもないですし
    493 : NAME IS - 2008/04/03(木) 17:03:12 ID:??? (+30,-29,-3)
    PHP、CGI、JSP、ASP、ASP.NET
    さぁ、好きなのをお選び。
    494 : NAME IS - 2008/04/03(木) 17:07:39 ID:??? (+18,-11,-28)
    >>493
    MySQLからSQLでデータを取り出し、それからさらにPHPなどでHTMLに渡すという事でしょうか?
    めんどくさいですね・・・
    495 : 490 - 2008/04/03(木) 17:13:13 ID:??? (+20,-7,-16)
    phpを使う場合はphpの中にSQLを書く事ができるんですね
    496 : NAME IS - 2008/04/03(木) 17:14:52 ID:??? (+57,+29,-7)
    他でも一緒だよ
    とりあえず、これ以上はスレ違い、というより板違いな気が
    497 : NAME IS - 2008/04/03(木) 17:32:17 ID:??? (+56,+28,-14)
    それが面倒だと思うなら、Flashから直接SQLサーバと通信してください。
    サーバ系は一切必要なくなりますよ。

    http://asql.mooska.pl/
    498 : NAME IS - 2008/04/03(木) 23:08:13 ID:??? (+19,-18,-54)
    SQLでデータベースからデータをselectした後、そこからさらにデータを絞り込む事はできますか?
    具体的に言いますと、抜き出したデータの5行目~10行目だけを選択するという感じなのですが、可能でしょうか?
    499 : NAME IS - 2008/04/03(木) 23:20:23 ID:??? (+50,+2,+0)
    可能です
    500 : NAME IS - 2008/04/03(木) 23:38:14 ID:??? (+74,+21,-2)
    >>499
    それってSQLだけで可能ですか?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1064 + - limit + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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