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

    元スレMySQL 総合 Part13

    mysql覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1064 + - limit + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    451 = :

    数値と文字列比べちゃダメでしょ。

    452 = :

    とりあえず、
    SELECT cast('hoge' as signed);
    を実行してみればいいと思うよ。

    453 = :

    その場をしのぎたいだけなら、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 = :

    >>451
    数値に対して文字列で比較しても、そもそも型自体が異なるので絶対合致しないもの、と思っておりました。
    しかし何故か0のものが抽出されてしまった為、疑問に思いました。

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

    >>453
    ありがとうございます。
    期待した通りの結果が返ってきました。
    >indexとidがあるのがそもそもおかしい
    こちら当方も感じました(他の方が作ったものの修正をしています)。
    あと、CREATE TABLE で主キーに UNSIGNED を付ける辺り、なるほどと思いました。
    大変勉強になりました、ありがとうございます。

    455 = :

    MySQLのコマンドラインツール(mysql.exe)のログを取る方法はありませんか?
    一度に大量のSQLスクリプトを実行するとログが流れてしまって、
    エラーが出ていても気づかないということがあるんです。

    456 = :

    リダイレクトしてファイルに落とせば?

    457 = :

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

    型が違うと、いちど失敗してから変換が発生するから、
    明示的に変換するのに比べてオーバーヘッドが発生することだけ頭の片隅にでも置いておけば、
    その理解で大体OK

    459 = :

    http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
    あなたが使用している PHP, MySQL のライブラリ(libmysql.dll, libmysqlclient)
    の標準キャラクターセットは何かご存じですか?

    とありますが、標準キャラクターセットを調べる方法はあるのでしょうか?

    460 = :

    正規表現の置き換えはできますでしょうか?
    イメージとしては以下のような感じです。

    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 = :

    正規表現使いたいときも確かにあるが、
    その例の場合単に第一正規化されてないだけじゃ?
    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 = :

    >>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 = :

    意図が伝わらなかったかな。
    要は、テーブル定義(というか設計)見直せば?ってこと。
    正規表現を使わなくても、テーブルさえちゃんとしてれば
    461で示したSQLで実現できるよね?

    もし変更が不可能だとしても、
    idから部分文字列を切り出すとかすれば十分実現可能。

    464 = :

    どうしても正規表現が使いたいなら、
    http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
    ここを参考にすればいい。
    でも、正規表現はそこそこ重い処理だから、
    RDBMSでは極力使わないほうがいい。

    470 :

    為になるHP
    http://u.aniota.info/?fayuwz

    471 :

    同一テーブルをサブクエリでselectしてdelete出来ないので
    テンポラリテーブルを使おうと思いますが、
    テンポラリテーブルを削除する前に
    何らかの形で操作側のプロセスが死んだ場合、
    テンポラリテーブルだらけになるんじゃないかと思うのですが、
    そのあたりはどうなってるのでしょうか?

    472 = :

    >>471
     接続が終了するとDROPされるから問題ないんじゃね?
    http://dev.mysql.com/doc/refman/5.1/ja/create-table.html

    477 = :

    ↑ おっと、>>474 へのレスだ

    480 = :

    perl/php などのスクリプトに接続IDとパスを書いて
    そのmysql、この場合はlocalhostみたいだから鯖にphp置いてそこから
    接続にいく感じ
    ftpはそういうスクリプトを上げるときにつかうけど
    mysqlにつかうときはバックアップを取るときくらいか

    481 = :

    ここでいいのかよくわかりませんが、疑問・質問等のスレッドがなかったのでここに書きます。使っているのはMySQLなのでここに書きますがデーターベース全般についてです。

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

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


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

    のようにデーターベースでは分けるでしょうか?
    Pythonのようなオブジェクト指向言語で組み立てれば「駅」オブジェクトは「住所」インスタンスを持つことになると思うので、このようなテーブル構造を思いついたのですが「駅」には固有の「住所」しか当てはまらないので別テーブルにする利点が無い。
    「住所」なんてテーブルだと「家」というテーブルを作ったときにこのテーブルからも「住所」を参照することになって「住所」テーブルには「駅」「家」二つのテーブルの住所が記録されることになって美しくない。このような場合どのようにするのがベストでしょうか?
    乱文・長文で失礼いたしました、気に触ったらスルーしてください。

    482 = :

    とりあえず、リレーショナル理論とか正規化について勉強すれば?
    RDBMSとかSQLは、オブジェクト指向だとか、
    手続き型だとかとは全然違うことがわかると思う。

    483 = :

    >482
    ここまでオブジェクト指向とにていると、どうしてもそれで考えてしまいますorz
    おっしゃるとおり、やはりデーターベースの考え方をしっかり学んだほうがいいようですねorz
    http://www.oreilly.co.jp/books/database/
    のものを読んでみようと思います。ありがとうございました。

    485 = :

    そこでなぜ引用符をつける。

    487 = :

    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;

    490 = :

    mysqlをインストールして適当にデータを入れてみたのですが、このデータをhtml上に呼び出すのってどうすればいいのでしょうか?

    491 = :

    これまた大味な

    492 = :

    SQLでselectしてデータを取り出すというのは分かるのですが、それをどうやったらページ上に表示できるのかなぁと
    javascriptみたいにhtml上に直接かけるわけでもないですし

    493 = :

    PHP、CGI、JSP、ASP、ASP.NET
    さぁ、好きなのをお選び。

    494 = :

    >>493
    MySQLからSQLでデータを取り出し、それからさらにPHPなどでHTMLに渡すという事でしょうか?
    めんどくさいですね・・・

    495 = :

    phpを使う場合はphpの中にSQLを書く事ができるんですね

    496 = :

    他でも一緒だよ
    とりあえず、これ以上はスレ違い、というより板違いな気が

    497 = :

    それが面倒だと思うなら、Flashから直接SQLサーバと通信してください。
    サーバ系は一切必要なくなりますよ。

    http://asql.mooska.pl/

    498 = :

    SQLでデータベースからデータをselectした後、そこからさらにデータを絞り込む事はできますか?
    具体的に言いますと、抜き出したデータの5行目~10行目だけを選択するという感じなのですが、可能でしょうか?

    499 = :

    可能です

    500 = :

    >>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 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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