- 締切済み
飛び飛びデータ検索
MYSQLにて、データ検索を行っております。 A番目のレコードからB個飛ばしで360個のデータを抽出したいのですが、 なかなか速くて良い方法が見つかりません。 例えば、5番目,8番目,11番目・・・と言う風に 最初とインターバルが決まっています。 今、試してみたものが、FOR文で"何番目のレコード"という値を360個取得し、 INを使って検索しています。 しかし、この方法だと、平均1SEC,最悪インターバルの代わった後だと3SEC 掛かってしまいます。 目標は、0.1SEC。とにかく速ければ速いほど良いと言うことなのですが・・・ 何か良い方法・ヒントなどありましたら、ご教授下さい。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- phpMyAdminでのデータ検索方法
「さくら」のレンタルSVを利用しています。 そのSVのphpMyAdminで特定のレコードの検索方法について教えてください phpMyAdminのバージョンは3.3.10.5となっています テーブルはフールド数200程度、レコード数2000程度のDBがあります その中から、ある特定のレコードを抽出して特定のフィールドのデータ 修正をしようとしています phpMyadminにログインし該当のテーブルを指定してデータを全件表示します。 例えばフィールドが、a1,a2,a3,a4・・・とあったとします a1に"abcde"があることを確認した後(試験のためで本来は必要なし)、 phpMyadminの検索メニューをクリックして検索画面に進みます その画面でフールドa1のところに"abcde"を打鍵して「実行」ボタン を押下したら、本来は該当のデータが出てくると思うのですがエラー画面がでます 内容は 実行したSQL: select'a1','a2','a3'・・・・ from 'テーブル名' where 'a1'=abcde order by limit 0,30 MySQLのメッセージ #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 2 とこのようなメッセージがでます ちなみに 次のSQLのselectの所を全て選択するのでなく*で記載すると該当のレコード を抽出できます select * from 'テーブル名' where 'a1'=abcde phpMyAdminの検索画面の最下段にオプションがあり該当のフィールドを 1つ以上選択できる画面があるのですが、10件程度の選択なら抽出します 全件を選択したり20件だとエラーとなります このオプションでの選択数は限度があるのでしょうか あるいは、別に何か選択する方法があるのでしょうか どなたか、上記の操作で検索ができるようにする方法を教えて いただけませんか よろしくお願いします。
- 締切済み
- MySQL
- Accessで重複したデータのみ平均を割り出す方法
WindowsXP、Access2003を使っています。 00:00:00 1 00:00:00 2 00:00:01 3 00:00:02 1 00:00:03 1 00:00:03 1 このように時間と数字が隣り合ったデータがあるのですが、 時間が同じところは数字を足して平均を割り出す方法はありませんか? 上記のデータだと 00:00:00 1,5 00:00:01 3 00:00:02 1 00:00:03 1 このようになるようにしたいです。 まず時間が重なるレコードを抽出出来ればいいと思うのですが、 重複データを削除するやり方はわかっても、抽出の方法がわかりません・・・
- ベストアンサー
- オフィス系ソフト
- MySQLでデータを時間範囲で抽出したい
mysqlでテーブルから、日付データが1ヶ月以内でかつ7時から8時までのデータを抽出する方法がわかりません。 テーブル内のtimeカラムにはタイムスタンプ型で日付が入っています。 time「2012-06-04 07:14:38」 time「2012-05-04 10:14:38」 time「2012-05-04 08:14:38」 time「2012-05-04 13:14:38」 SELECT * FROM table WHERE time >= DATE_ADD(NOW(),INTERVAL -1 MONTH) で1ヶ月以内のデータは抽出できたのですが、さらに7時から8時までのデータを抽出する方法が分からずかなり困っています。 どなたかご教授お願いいたします。
- 締切済み
- MySQL
- 検索項目のデータの比較確認方法が分かりません。
データベースの主キーの時刻と同じ時刻のデータを 持っていた場合には、UPDATEで修正する。主キーと 同じ時刻とは異なったデータを持っている場合には、 INSERTでDBに書き込みをしたいのですが、うまく動 作させることができない状況です。 $DSQ[0][0] = "2007-01-31 11:00:00"; $DSQ[0][1] = 2.5; $DSQ[0][2] = 3.7; $DSQ[0][3] = -0.8; $DDSQ[0][0] = "INSERT INTO data VALUES('".$DSQ[0][0]. "',".$DSQ[0][0]. ",".$DSQ[0][1]. ",".$DSQ[0][2]. ")"; $DDSQ[1][0] = "UPDATE data SET record_time = ".$DSQ[0][0].", data01 = ,".$DSQ[0][0].", data02 = ,".$DSQ[0][1].", data03 = ,".$DSQ[0][2]. ")"; $MySQL['conn'] = @mysql_connect($MySQL['HOST'],$MySQL['USER'],$MySQL['PASSWORD']) or exit('MySQLへ接続できませんでした'); mysql_select_db($MySQL['DATABASE'], $MySQL['conn']); $MySQL['query'] = "SELECT * FROM data WHERE record_time = '$DSQ[0][0]'"; $MySQL['result'] = mysql_query( $MySQL['query'],$MySQL['conn'] ); while($tableD = mysql_fetch_array($MySQL['result'],MYSQL_NUM)) { print_r("data_view = ".$tableD); print("\n"); } if( $DSQ[0][0] != $tableD[0]){ $MySQL['result2'] = mysql_query( $DDSQ[0][0],$MySQL['conn'] ) or exit($i.'番目のデータがMySQLへ書き込みできませんでした'); }else{ $MySQL['result2'] = mysql_query( $DDSQ[1][0],$MySQL['conn'] ) or exit($i.'番目のデータがMySQLへ書き込みできませんでした'); }
- ベストアンサー
- PHP
- DBから抜き取ったデータを10レコードずつ表示する方法
データベース(MySQL)にデータを置きPHPでデータを表示しています。 しかしデータが大量になってしまったので10レコードずつ表示したいと思っています。各レコードにはauto_incrementなどで番号などの目印はつけていません。 この場合、引数で?page=1とした場合、はじめのレコードから10番目のレコードを表示し、page=2となれば11番目から21番目のレコード....といった感じにするにはどうしたらよいのでしょうか?可能なのでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
- MySQLに格納するデータと検索速度
MySQLに都道府県のデータをinsertしたいのですが、「北海道」という文字にするか、置き換えて数字の「1」にしようか迷っています。 「北海道」という文字をinsertした場合は、取り出したときにそのまま表示できるので便利かなと思っています。 しかしながら、抽出する際に「北海道」という2バイト文字で検索するのもどうなのかと思っています。 抽出する際には数字の「1」などの方が早いような気もするのですが、数万件のデータだったら「北海道」などの2バイト文字を検索しても問題ないでしょうか? このような場合の定石がありましたら教えてください。
- ベストアンサー
- MySQL
- エクセルの検索で元データを増やしたい!
Vlookupで元データを抽出できるようにしているのですが、 元のデータを増やすと範囲から外れてしまって、 検索の対象になりません。 データが増えても、 検索範囲になる方法はありますか? お願いします。
- ベストアンサー
- オフィス系ソフト
- Excelですが、同一データが複数あるとき、検索して、その全部を抽出する方法
Excelですが、検索キーに、同一データ(レコード)が複数あるとき、検索して、その全部を抽出表示する方法を教えてください。 Vlookupは、同一データが複数あるとき、最初の行(レコード)を1つだけ抽出してきます。2つ目、3つ目の行は抽出できませんが、その全部を抽出する方法がありますでしょうか。 例えば、以下の例で、「A株式会社」をキーに検索した場合、<検索結果>シートのように、該当のレコード3つ(行2~4)を抽出して表示するようにしたいのですが、方法はありますでしょうか。よろしくお願いします。 <データシート> 列A 列B 列C 列C 行1 No 会社名 所属 担当者 行2 1 A株式会社 ○事業部 坂下順人 行3 2 A株式会社 △事業部 滿山友人 行4 3 A株式会社 △事業部 目標達子 行5 4 B株式会社 設計部 山下清人 行6 5 B株式会社 営業部 横浜美人 行7 6 C株式会社 営業部 川崎次郎 行8 ・・ ・・・・・・・・・・ <検索結果:別のシートにおいて> 行1 会社名 所属 担当者 行2 A株式会社 ○事業部 坂下順人 行3 A株式会社 △事業部 滿山友人 行4 A株式会社 △事業部 目標達子
- ベストアンサー
- オフィス系ソフト
- もっとも新しいレコードから検索する方法
MySQLにデータを登録しており、PHPにてWebサイトにデータを表示しています。SQLはSELECT * FROM TABLE WHERE .... なんですが、この場合一番初めのレコードから順に表示されてしまうため、古いデータがはじめに、新しいデータが最後尾に表示されてしまいます。 これを解消するため最後尾のレコードから検索するにはどうしたらよいのでしょうか?又、カテゴリが異なってしまいますが、PHPでもっとよい方法などございましたらお願いします。
- ベストアンサー
- MySQL
- データの検索の為に列を増やすのは正しいのか
現在mySQLの勉強中です。 テーブルtableにidとnameとunixtimeが格納されています。 登録件数30000件。idは、登録申請時に順に割り振られています。 unixtimeはnameに対応する人間の登録確定時を表したものです。 したがって、idとunixtimeの順番は必ずしも一致しません このデータから、PHPを使って登録確定日別でid、nameのリストをhtmlで作成したいと思います。 たとえば20001224.htmlには2000年12月24日に登録確定した人のリストが入っているようにしたいです。 このような出力を効率的に行うために、unixtimeからyearとmonthとdateを作成しました。データ型はすべてintです。 あるデータのunixtimeが2011/12/31の場合、yearは2011、monthは12、dateは31となります。 htmlを作成するにあたり、データベースからデータを出力しなければいけません。そのため、 まずdateが条件に一致するデータを抽出して配列にidとmonthとyearを格納し、 次にmonthが条件に一致するものを抽出して配列にidとyearに格納し、 最後にyearが一致するデータのidを抽出し、idに該当するデータをechoしようと考えています。 が、この方法は正しいのでしょうか。 SQLは検索にいろいろテクニックが必要で、方法を誤ると途端に検索速度が速くなったり遅くなったりすると聞きました。 列を増やすことで、メモリの使用量が増えて検索が遅くなったり、もしかしたらunixtimeで上手に検索する方法があるのかもしれないと思います。 どなたかこういう時はどういう検索を行うのが正しいのか、ご教示ください。 どうかよろしくお願いします。
- ベストアンサー
- MySQL
- iPadの海外版と日本版の違いについて調べました。海外版のiPadと国内版(日本版)のiPadにはモデル番号の違いがあります。また、内部的な仕様やファームウェア、iOSの設定などにも違いがあるかもしれません。詳細を調査してみましょう。
- 海外版のiPadと国内版(日本版)のiPad、特にWi-Fi版の場合について調査しました。モデル番号が異なることがありますが、具体的な違いは見つかりませんでした。ただし、内部的な仕様やファームウェア、iOSの設定などには差異がある可能性があるので、注意が必要です。
- 海外版のiPadと国内版(日本版)のiPad、特にWi-Fi版について、モデル番号や内部的な仕様などの違いについて調査しましたが、明確な差異は見つかりませんでした。ただし、現地で購入した場合には言語設定などで違いが生じる可能性があるので、注意が必要です。
お礼
早速のご回答有り難うございます。 似たような形のものを試してみましたが、 レコード1つ1つに対して計算を行うようで、 少し時間が掛かってしまいます。 全レコード数は2万件です。 実際は20万件程度になると考えております。 計算をせずにまとめて一気に取れる方法など ありませんでしょうか?