• ベストアンサー

検索条件に関して

こんばんは。お世話になっております。 id   auto_increment randam ランダム数値 id_key 1または2を登録 例えですが、上記のようなカラムがあるテーブルがあり、id_keyに1と登録されているレコードの一覧を検索結果として表示させたいのですが、その際、randamに登録されている数値が同じであるレコード数も同時に検索結果として表示させたいと考えています。 例えですが、具体的には… id  randam id_key 1   25252  1 2   25252  2 3   25252  2 4   34535  1 5   57234  1 以上を結果表示として id 1  3件 id 4  1件 id 5  1件 このように、phpにてブラウザに表示させたいと考えているのですが、randamにランダム数値を登録している事もあり、検索条件として同じ数値がある場合の条件設定が分からずに居る次第です。 この数日間、どうにかならないものか?と、ない頭を捻ってはいるものの、思いつく事と言えばif文の嵐になってしまって…。上手く説明できずに分かりにくい日本語になっていますが、ヒントだけでも頂戴出来れば幸いです。 お忙しい中恐縮ですが、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nikuq
  • ベストアンサー率22% (8/36)
回答No.5

#2です。 id_keyが1の値のみを抽出し、かつ、id_keyが1の値のrandamの件数を抽出するには、下記の様にSQL文を発行してみては如何でしょう? select id_key,count(randam) as randam_num from hoge_table where id_key = '1' group by randam order by id_key という具合にSQL文を発行すると、 where区でid_keyが1のデータのみを抽出し、かつ、randamをグループ化し、グループ化したrandamをcount関数でカウントしているので、 恐らくご希望の結果が得られると思います。 なお、カウントしたrandamの値をPHPで表示させるには、結果IDをmysql_fetch_array関数で配列に代入し、配列の添え字にはSQL文で発行したカラム名で取り出します。 phpでsql文を発行し、配列に代入するには下記の通りになります。 //mysql文の発行し、結果IDを『$hoge_list』に代入します //※${connect_id}はDB接続IDです。省略も可ですが、付けとけば確実です。 $hoge_list = mysql_query ("select id_key,count(randam) as randam_num from hoge_table where id_key = '1' group by randam order by id_key",${connect_id}); //結果IDを配列『$hoge_array』に代入 $hoge_array = mysql_fetch_array(${hoge_list}); //配列からブラウザに出力 //id_keyの出力 print "${hoge_array['id_key']}"; //randamのカウント数を出力 print "${hoge_array['randam_num']}"; という感じになると思います。 ちょっとわかりづらいですが、試してみてください。 ちなみに、PHPでの出力はechoでもprintでも大丈夫です。私はperlを使っていたので、printと表記するのになれてしまっているだけでせう。

sadacha
質問者

お礼

nikuq様 こんばんは。早速のご回答、かつ事細かな説明を有難う御座います。 これまで、mysql_fetch_arrayを使った事が無く、手持ちの本を見ながらでしたが、無事、描いていた結果を表示させる事が出来ました。 この手の質問に、スクリプトを記述するという面倒な対応に、nikuq様をはじめ、ご親切にご回答くださる皆様には感謝しております。有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

AS CNTはそれ以降CNTという列名で使用できるようにする記述です。 CNT自体に意味はなくCOUNT(*)の別名なので、AでもBでも構いません。

sadacha
質問者

お礼

kabilunlun様 こんばんは、早速のお返事有難う御座います! お二方の貴重なヒントを元に、描いていた結果を表示させる事が出来ました! 初めて見るものもありましたが、今後に向けても貴重なヒントを下さったように思えます。 有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

#1です。訂正です。 idはauto_increment(重複なし)なので、「DISTINCT」は不要でした。

sadacha
質問者

お礼

kabilunlun様 はじめまして、こんばんは。 ご丁寧なアドバイスを有難う御座います。 只今、お二方からご教授いただいたコードを基に動かしておりますが、CNTやAS CNTとはどのようなものになるのでしょうか? 初心者の私からして初めて見るもので、検索して調べようにも、検索キーワードをどのようにしたら良いかと・・・お手数お掛けいたしますが宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • nikuq
  • ベストアンサー率22% (8/36)
回答No.2

検索した結果にrandamの各値の合計数を出したいだけならば、下記の様にすればでますよ。 select id,count(randam) as randam_num from hoge_table group by randam order by id こうすると、randamをグループ化して同じ数字はひとつのカラムとして抽出されます。その際に、count関数でrandamの同じ数字をカウントするので、 検索結果表示と同じ結果が得られます。 検索結果は id | randam 1 | 3 4 | 1 5 | 1 となると思います。 やってみそ! 尚、参考なるかわかりませんが、group byに関するMySQLのマニュアルURLも のせますね。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html
sadacha
質問者

お礼

nikuq様 はじめまして、こんばんは。ご丁寧なアドバイスを有難う御座います。 お恥ずかしいのを覚悟でお伺いしますが、randamの件数の出力は、どのように記述したら良いのでしょうか? id_keyが1のレコードのみを出力させる事が出来たのですが、件数を表示させる事が出来なくて・・・ count関数なども調べてみたものの、結果は1件と出てしまうのです。 お忙しい中恐縮ですが、宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

MySQLは使用したことがないのですが、文法はOracleと変わりないようなので、 SELECT A.id,B.CNT FROM (SELECT DISTINCT id,randam FROM テーブル名 WHERE id_key = 1) A, (SELECT randam,COUNT(*) AS CNT FROM テーブル名 GROUP BY randam) B WHERE A.randam = B.randam で、できないでしょうか。 Aは重複なしのidとrandamをid_keyが1という条件で抜き出し、 Bはrandamでグループ化してrandamごとの件数を求めます。 最後にrandamをキーにしてAとBをつなげて、idと件数を求めます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQL 複合検索条件

    MySQLでひとつのテーブルの複数フィールドに値を設定してレコードを参照したい。 例えば、key-field-1 >= ??? と key-field-2 >= ???で key-field-1は主キーでkey-field-2は従属キーとし、key-field-1の条件に合うレコードで、次にkey-field-2の条件に合うレコードを見つけ、それ以降の全てのレコードを抽出したい。 select * from table-1 where key-field-1 >= ??? and key-field-2 >= ??? で検索すると 両方の条件を満たすレコードのみ検索される。 アドバイスを待っています。

  • ロボット型の検索エンジンについて

    自分のサイトのURLをgooに登録しましたが、 一ヶ月たっても、その後数ヶ月たっても、そのURLは検索結果に反映されません。 METAタグで指定したキーワードで検索すると、 ・私のサイトのタイトル ・トップページにMETAタグで指定した説明文 (この説明文と同じ文章は他のどこにも書いていません) ・http://www.ima-achu.com/cgi-bin/loveletter/ering.cgi?mode=randam (このURLは、私が参加しているウェブリングのランダムリンクです) が検索結果として出てきます。 1)何故このランダムリンクと私のサイトのMETAタグで指定した文章が関連付けられてしまったのか。 2)gooにURLを登録しても反映されないことはあるのか。 3)~cgi?mode=randamのようなURLが検索エンジンに登録されることは普通あるのか。 とりあえずまたURLを登録して様子を見ていますが、 何か原因などがわかれば教えて下さい。

  • 複数条件検索について

    よろしくお願いします。 検索条件として以下3つあるとします。 1.人数指定 2.年齢指定 3.住所指定 普通ですとこの条件全てを満たしたデータを検索するように ANDなどでしますが、この3つの条件がランダムな場合(例えば 1と2、1と3などなど・・)、ANDですと全て揃ってないと 検索結果が得られません。ORですとどちらかに合った検索結果になってしまいます。 ランダムな組み合わせでその条件を全て満たした結果を得るには何か うまい方法はありますでしょうか?? 説明が下手で申し訳ありませんが、よろしくお願いします。 環境 OS:winXP PHP4.4.4 apache2 mysql4

    • ベストアンサー
    • MySQL
  • mySQLの抽出条件について

    いつもお世話になります。 mySQLの検索方法について教えて頂けたらと思います。 検索したい条件は現在より6ヶ月以前に登録されたレコードを抽出したいのです。 いろいろ調べてはみたのですが・・・ 環境 mySQL Ver.5.0 ID(INT)auto_increment|CONTENTS(TEXT)|登録日(timestamp)ON UPDATE CURRENT_TIMESTAMP| 1|あああああ|2007-06-03 10:44:24| 2|いいいいい|2008-06-02 10:44:24| ・・・ 上記のような構造になっており、例えば、6ヶ月以上前の登録日のデータを抽出したいのですが、いろいろ試してみたもののうまく抽出できません。どなたか知恵をお借りできたらと思いますので、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 検索結果に対する絞込み

    お世話になってます。 検索条件で絞り込んだ結果に対して、さらに絞込みをかける方法を教えてください。 検索条件を持ち歩いてもいいのですが、30個近くあるのでセッションを使うことにしたのですが、うまくいきません。 具体的には ID 名前 住所 地区 1 山田 東京 関東  2 佐々木 東京 関東 3 鈴木 埼玉 関東 4 岡田 大阪  関西 最初に「関東」を検索条件に検索すると表示画面に3件表示されます。 セッションテスト1($_SESSION["test1"])には検索後の3件のIDを登録しました。 次に表示画面には検索条件のテキストフィールドがあり、「東京」と入力すると2件表示されます。 具体的にはセッションテスト1に値がセットされていれば $kensaku=$_SESSION["test1"]; $sql="SELECT *from test1 where ID=$kensaku and 住所=東京"; としています。 ここまでは絞込みがうまくいき表示できたのですが 戻るボタンで戻ったとき、「埼玉」といれて検索をかけると、1件表示させたいのですが $_SESSION["test1"]に値がセットされていて、 先ほど「東京」で絞り込んだ結果に検索をかけているので、表示されません。 不動産などのサイトを見るとパラメーターで渡しているのですが、セッションを使う方法ではできませんでしょうか。 わかりにくい文章で申し訳ないのですが、 検索結果に対して、さらに検索を何度もかけるという方法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列内のデータを1つのテーブルに登録。

    配列内のデータを1つのテーブルに登録。 お世話になっております。 以下のような構成のテーブルがあり、カラム名1、2、3、4と100まであるのですが、そこへ 配列内にある100を数えるデータを登録するには、どのようなSQL文が適切なのでしょうか? no id date 1 2 3 4 5 6 ...... 100 安易に、$sql = "INSERT INTO test values(0, '$id', '$date', '$randam[0]', '$randam[1]', '$randam[2]',....とも考えたのですが、他に効率のいいものがあるのでは?と思い、投稿した次第です。色々と考えてはいるのですが他に思いつかないので・・ 補足:配列にあるデータはランダムな数値を格納してあり、このSQL文の前に、配列を生成したものとなっております。 以上、お忙しいなか恐縮ですがご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • SQLの検索条件について教えてください

    PL/SQLを使い始めた初心者です。 Oracleのバージョンは9iです。 検索時の条件の設定について教えてください。 例えば、2つテーブルがあるとします。 Aテーブル.TESTNoA ------------- 11111 22222 33333 44444 55555 Bテーブル.TESTNoB ------------- 11111 33333 55555 SQL発行時、 WHERE A.TESTNoA = B.TESTNoB で3件のレコードが取得できますよね。 これと同じ結果が欲しいのですが、 検索条件にテーブル型の変数(索引付表?)は使用できるのでしょうか? 変数 TestHen(0) = 11111 TestHen(1) = 33333 TestHen(2) = 55555 こんな感じで設定しておいて、この変数を利用して 一度のSQLで結果を取得したいのです。 できればLIKEを使って検索したいのですが…。 書き方がおかしかったらすみません。 どなたかお知恵をお貸しください。

  • メールにDBのIDを表示する危険性

    ユーザーの会員登録認証用メールに、そのユーザのDBのレコードの ID(MySQLのAUTO_INCREMENTの値)を表示しようとしたところ、上司 からセキュリティの危険性を指摘されました。 自動採番のIDをメールに表示することは、危険なのでしょうか? メールには、ランダム生成の文字列も格納してあり、本人認証はそちらで 行うようにしています。

    • ベストアンサー
    • MySQL
  • access、検査の結果表示のサブフォーム、条件によって色を変更

    テーブルは、「T_メイン」 フォームで「F_検索条件入力」と「F_メイン検索結果一覧」があり、 それぞれ元テーブルはなく、 F_検索条件入力は検索条件を入れるだけのフォームをデザインから作成。 その中の検索ボタンを押すと、 Me![F_sub].Form.RecordSource = "SELECT * FROM [T_メイン] where Forms![F_検索条件入力]![検索条件] = [T_メイン]![フィールド1]" Me.Requery のような感じになっております。 上記の結果が、F_検索条件入力の中にあるサブフォーム「F_検索結果一覧」が表示されます。 検索結果を出した「F_検索結果一覧」の数値を元にフォントに色を変えたいです。 複数件数の検索結果がある場合、一番最初のレコードのデータをもとにすべての色が変わってしまっています。 今は「読み込み時」にVBAがはいっています。 「レコード移動時」にいれてみたが、レコードをクリックすると、今度は次のレコードの値を元にした条件ですべてのレコードの色がかわってしまうんです。 1件ずつそれぞれのデータをもとに色がかわるようにするにはどうしたらいいですか?

  • 後からAUTO_INCREMENTの値を1にする方法

    MySQL=4.0.26 phpMyAdmin 2.6.4-pl4を使用しています。 AUTO_INCREMENT(int11)が自動追加されて、数値が70になったとして レコードを削除しても数値が1になりません。 プライマリーキーの関係かなと思いますが、 後からphpMyAdmin上でAUTO_INCREMENTの値を1にする方法、また、自由に数値を変更する方法を教えて頂けないでしょうか。 初期の段階でDBを構築する場合でSQLを実行する場合の AUTO_INCREMENTは解るのですが、 たとえば PRIMARY KEYを(`no`)として TYPE=MyISAM AUTO_INCREMENT=1; として、正常に利用していますが、 DB構築後、レコードが登録された後、phpMyAdmin上で レコードを削除した後またAUTO_INCREMENT=1などにする方法が 解りません。 説明べたで申し訳御座いませんが、 どうぞ宜しくお願い致します。

    • ベストアンサー
    • MySQL
このQ&Aのポイント
  • EP-803AのICC50インクカートリッジを認識できませんとのメッセージが表示され、カートリッジを交換しても改善しません。EPSONの製品サポートに問い合わせてみましょう。
  • EP-803AでICC50のインクカートリッジの認識エラーが発生し、カートリッジの交換で問題が解消しない場合は、EPSON社の製品サポートに連絡して解決策を尋ねてみることをおすすめします。
  • EP-803AでICC50のインクカートリッジが認識されないエラーメッセージが表示される場合、EPSONの製品サポートに相談して解決策を見つけることが最善の方法です。
回答を見る