• 締切済み

MySQL5.xで発生している問題について質問します。

MySQL5.xで発生している問題について質問します。 CREATE TABLE click ( IP varchar(20) default NULL, time date default NULL ) ENGINE=MyISAM; 上記のようなテーブルを作成しました。 このテーブルからIPにIPアドレスを指定してデータ取得を試みると SELECT * FROM click where IP = '000.000.000.000' とした際には、5000件 取得できるのですが、 (000.000.000.000 はIPアドレスです) SELECT * FROM click where IP = '000.000.000.000' order by click.time desc (000.000.000.000 はIPアドレスです) とした場合には 4件しか取得できません。 MySQL4.x では発生しなかった現象で、MySQL5.x にバージョンアップして発生した 現象で対応に困っています。 上記の現象に対応する方法をご存知の方がいらっしゃればお教えください。 ※諸事情でMySQL4.x MySQL5.x と正確なバージョンが見られない状況で申し訳ありません。

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

みんなの回答

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

簡単なサンプルをつくってやってみましたが、とくに問題がないみたいです。 思いつくのはゴミデータがはいっている・・・とかですが、 文法上それも考えにくいとおもいます。 私の乏しい知識と経験ではorder byによってデータ数が左右される ような事象のは聞いたことがないので場合によってはMySQLの 再インストールなど本質的な対応が必要かもしれません。

turinavi
質問者

お礼

ご回答ありがとうございます。 私もこのような問題に直面したのは、初めてのことで対応に困っておりました。 再インストールも含めて検討します。 SELECT * FROM click WHERE INET_ATON(IP) = INET_ATON('000.000.000.000') ORDER BY click.time DESC とすると、正常に取得ができるので、IPアドレスが起因している問題なのかもしれません。 しかしながら、IPカラムには、IPアドレス以外の文字列(例えば unknown など)も入る事が あるため、上記のSQLでは一括に処理をすることができずにいます。 引き続き情報をお待ちします。よろしくお願いします。

関連するQ&A

  • mysqlのselectについて

    mysqlのselectについて selectがおかしいです。 select * from hoge where a = 'あ'; とすると、 |"あ" |"hoge" | null | |"あ" |"hohi" | null | ... って感じで出力されるはずなんですが、  | |"hoge" | null |  | |"hohi" | null | ... って感じで"あ"のとこが押しつぶされて出力されてしまいます。 何がどうなってるんでしょうか...? 文字コードはsjisで、あってるはずなんですがなんか動きません

    • ベストアンサー
    • MySQL
  • ★Mysql ある日程から10日後以降を取得したい

    Mysqlで登録された日付の10日後以降全てを取得したいです。 SELECT * FROM table1 WHERE clum1 ・・・ 続きを教えてください。

    • ベストアンサー
    • MySQL
  • mysqlの質問です。

    mysqlの質問です。 select T1.ID,T1.NM from ID.FORM T1 WHERE・・・ というクエリを見かけたのですが 「ID.FORM」こういった形でテーブルを記述することは可能なのでしょうか。 今までに見たことがなく、また検索しようとおもってキーワードが思いつきません。 どなたかお教えいただけませんでしょうか。

    • ベストアンサー
    • MySQL
  • MYSQLの差集合について

    MYSQLの差集合について MYSQLの差集合についてお教えください。OracleにはMinus、Postgres等はexceptがあります。MYSQLで同等の関数がないか調べましたが、無いのか検索がヘタなのかヒットしません。下記のようにSQLを書けばexceptと同じ効果があるのはわかりますが、exceptみたいにかけたら簡単かなと思います。そのような関数がありましたら、お教えください。よろしくお願い致します。 mysql> SELECT table1.* FROM table1 -> LEFT JOIN table2 ON table1.id=table2.id -> WHERE table2.id IS NULL;

    • ベストアンサー
    • MySQL
  • mysql_num_rowを繰り返したい

    ラジオボタン選択肢アンケートのデータをMySQLのテーブルに入れて、 mysql_num_row()で各選択肢の件数を抽出したいのですが。 選択肢は1~5の数値(int型)でanテーブルに入っています。 for ($i = 1; $ <= 5; $++) { $rst = mysql_query("SELECT * FROM an WHERE field=$i", $con); $kotae.$i = mysql_num_row($rst); } このように書くと 1の選択肢の数しか返してきません。しかも、件数が間違って返ってくる。  文法が間違っているからだと思うのですが。上記のようなことをやりたいのです。  forを使わないでやると、 $rst = mysql_query("SELECT * FROM an WHERE field=1",$con); $kotae1 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=2",$con); $kotae2 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=3",$con); $kotae3 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=4",$con); $kotae4 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=5",$con); $kotae5 = mysql_num_rows($rst); です。  forを使って楽にやりたい場合はどうすればよいでしょうか 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • mysqlのmatch() against()で検索結果が取得できませ

    mysqlのmatch() against()で検索結果が取得できません。 select * from fulltexttable where match( a ) against( '+ほげ' in boolean mode ) で検索結果は0件ですが、 select * from fulltexttable where a like '%ほげ%' だと検索結果は取得できます。 aカラムにはフルテキストインデックスは貼ってあります。 mysqlのバージョンは5.0.77 hogeテーブルはMyISAM どなたか助けてください。

  • MySQLでの集計

    いつもお世話になっております。MySQLを利用しておりまして質問です。 同じ構成のテーブルが5つあり、選択されたテーブルを集計するSQLを作成しています。 カラムを簡単に構成を書くと ID、名前、ステータス1、ステータス2 のような形です。 テーブル1、2、3が選択された場合 テーブル1と2でIDの重複のない一覧を作成し、IDが被っていた場合はステータスをそれぞれ大きいほうを保持するようにします。 そして次にテーブル1、2を合わせたテーブルとテーブル3で同じように集計をしたいのですが、ここがうまく出来ません。 実際の環境ではなく簡素化したものなのでおかしな点があるかもしれませんがこのようになっています。 SELECT TTT1.id,TTT1.名前,TTT1.st1,TTT1.st2 FROM(     SELECT id,名前,ステータス1 as st1,ステータス2 as st2     FROM(        SELECT *        FROM テーブル1 T1        WHERE T1.id NOT IN(SELECT T2.id FROM テーブル2 T2)        UNION All        SELECT *        FROM テーブル2 T2        WHERE T2.id NOT IN(SELECT T1.id FROM テーブル T1)     ) as TT1     UNION     SELECT id,名前,st1,st2     FROM(         SELECT T1.id,T1.名前,         (CASE T1.ステータス1 or T2.ステータス1 WHEN "2" THEN "2" WHEN "1" THEN "1" WHEN "0" THEN "0" ELSE null END) as st1,         (CASE T1.ステータス2 or T2.ステータス2 WHEN "2" THEN "2" WHEN "1" THEN "1" WHEN "0" THEN "0" ELSE null END) as st2,         FROM テーブル1 T1,テーブル2 T2         WHERE T1.id = T2.id AND NOT(T1.st1 IS null AND T1.st2 IS null AND T2.st1 IS null AND T2.st2 IS null) ) as TT2 )as TTT1 /* UNION ALL SELECT id,名前,st1,st2 FROM (TTT1とテーブル3を比較したもの)as TTT2 */ /**/で囲ったところでTTT1が呼び出せれば、テーブル1のところをTTT1にし、テーブル2をテーブル3にすれば出来ると思うのですが、そういうことは無理なのでしょうか? また集計するテーブルの数が不特定なので一つずつ集計をする形を取りましたが、 もっとこういう風にやればいいと言う方法はございますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQL 5.1 のCHAR(M)型に関して

    MySQL 5.1の CHAR(M)型のMは「文字数」でしょうか?それとも「バイト数」でしょうか? 教えて頂けませんか? 自分の認識では「文字数」と思っているのですが、下記のような現象が発生しております。 mysql> mysql> mysql> mysql> mysql> SHOW CREATE TABLE TEST\G; *************************** 1. row *************************** Table: TEST Create Table: CREATE TABLE `TEST` ( `MOJI` char(6) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.01 sec) ERROR: No query specified mysql> mysql> SELECT * FROM TEST; Empty set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('ああああ'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | +--------+ 1 row in set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('abcdef'); Query OK, 1 row affected (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | | abcdef | +--------+ 2 rows in set (0.00 sec) mysql> mysql> mysql> mysql> 環境はCentOS 5.5 で、OSの文字コードもMySQLの文字コードも「utf8」としています。 どうかご教授下さい。

  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL
  • MySQLのサブクエリ

    おせわになっております。 MySQLを愛用していますが、気になる疑問にぶつかりましたので、質問させてください。 ★MySQLの4.1系のサブクエリは、性能が悪いのですか? たとえば select * from t1 where key in ( select key from t2 where key2 in ( select key2 from t3 where col = 1)) のようなことをしようとしたとき、ものすごく遅いことがあります。 あきらめて、クエリを分けて、小分けに実行すれば、速いです。 サブクエリなどを高速に実行させる方法などありますでしょうか?MySQL5では違うものなのでしょうか? よろしくお願いします