• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのテーブルからのデータ取得および件数の取得)

2つのテーブルからのデータ取得および件数の取得

chukenkenkouの回答

  • ベストアンサー
回答No.5

検索結果が、0件になっていますか? PHPには詳しくないですが、SQL中の変数は、「'」(単一引用符)で囲む必要があると聞いたことがあり、ネット上に公開されている例を見てもそうなっています。 where id = $id ↓ where id = '$id' とすればどうでしょうか? また、どの部分に問題があるかは、#1で示したようにSQLを分解して確認するといいと思いますよ。

sadacha
質問者

お礼

chukenkenkou様 こんばんは。早速のお返事を有難う御座います。 先にお伝えしたSQLで検索結果は正常に呼び出されております。 where id = '$id' に関しても、ご指摘のようにも幾度か試しておりましたが、該当のカラムが数値型の場合($idが数値の場合?)、特に問題がないようです。 ('で括った方が尚良いことにはなりますね。) >また、どの部分に問題があるかは、#1で示したようにSQLを分解して確認するといいと思いますよ。 そうですね。当初順を追っての説明を頂いているのでその説明を参考に、改めて見直してみたいと思います! それでは、また改めてお返事(ご報告)いたしますので、宜しくお願い申し上げます。

sadacha
質問者

補足

chukenkenkou様 こんばんは。お世話になっております。 あれから試行錯誤を繰り返しておりますが、未だf_idを取得できずにおり、PHP側にて最初に抽出すべくf_idを配列に入れ、その後、chukenkenkou様からご指導いただきましたSQLにて呼び出したデータに付加する形で、とりあえずの結果を得ることが出来ました。 ソース的にはこんな感じ。 $sql = "SELECT no, id, f_id FROM friend where id = '$id' order by no desc"; $result = mysql_query($sql); $rows = mysql_num_rows($result); while($row = mysql_fetch_array($result)){ $f_no[] = $row["f_id"];//f_idを配列に格納 } ~中略~ $sql ="select `name`, `count` from `member` as m inner join(select min(no) as `no`, id, f_id, count(f_id) as `count` from `friend` where id in(select f_id from `friend` where id = '$id') group by id) as x on m.id = x.id order by no desc"; $result = mysql_query($sql); $rows = mysql_num_rows($result); $count_id = 0; while($row = mysql_fetch_array($result)){ $count_no = $count_id++; $f_id = $f_no[$count_no]; ~以下省略~ 本来であれば、全てSQLで処理すべきなのでしょうが、このようなソースで結果を得ることが出来ましたが、検索する際の効率?を考えると(自分のスキル不足から来る場当たり的な対処により)、データが多くなってきたときに不安を感じます。 chukenkenkou様からして、以上のようなソースを見て何かご指摘はありますでしょうか? 度重なる質問で恐縮ですがご意見のほど宜しくお願い申し上げます。

関連するQ&A

  • 3つのテーブルからのデータ抽出

    こんにちは。お世話になっております。 http://oshiete1.goo.ne.jp/qa3421595.html 以前、上記箇所にて似たような質問をさせていただきましたが、同じテーブルを用い、違う検索結果を出そうとしたところ、思うような結果を得られずに居る次第です。 今日も一日中試行錯誤を繰り返しているのですが、どうにも描いている結果を得ることが出来ません。お忙しい中恐縮ですが、お知恵を頂戴出来れば幸いです。(MySQL 4.1) 前回の質問は・・・ memberテーブル id  n_name 1  大輔 2  雅彦 3  順子 4  幸子 5  明美 6  二郎 friendテーブル(id、f_idは、memberテーブルのidを指す。) no id f_id 1  3  5 2  5  3 3  3  1 4  1  3 5  3  6 6  6  3 diaryテーブル(idはmemberテーブルのidを指す。memberのidに該当する人の発言データ) no id  date  subject 1  3   //  今日は寒いね 2  5   //  美味しそう 3  2   //  疲れたな 4  2   //  頑張ろう 5  1   //  楽しいぞ 6  6   //  晴れるといいな ※dateは省略しています。 以上、例えばmemberテーブルにおいて、id(下記SQLでは$tb_idとしています)が3の順子を検索した際、 friendテーブルを参照し、idカラムが3の相手であるf_idを見つけ、更にそのf_idを基にmemberテーブル内のn_name、 かつdiaryテーブル内の、date、subjectを下記のように一覧表示させたいという質問でした。 二郎 晴れるといいな 大輔 楽しいぞ 明美 美味しそう と、ここで、 二郎 晴れるといいな 大輔 楽しいぞ 明美 美味しそう 順子 今日は寒いね 以上のように自分の発言を表示させようと、したところ現在、 二郎 晴れるといいな 大輔 楽しいぞ 明美 美味しそう 順子 今日は寒いね 順子 今日は寒いね と、自分の発言が2度出てきてしまう状態です。 ちなみにSQL文は、 $sql = "select c.subject,m2.n_name,c.date,c.no,f.f_id,f.id from member as m inner join friend as f on m.id=f.id inner join diary as c on f.f_id=c.id inner join member as m2 on m2.id=c.id WHERE ((f.id=$tb_id OR f.f_id=$tb_id) AND f.id!=f.f_id) order by no desc LIMIT 0, 30;"; ここ数日、色々調べており、特に昨夜からは(今日も一日中。汗)ずっと試行錯誤を繰り返しているのですが、思い描く結果を得ることが 出来ない状態です。 お忙しい中恐縮では御座いますが、アドバイスのほど宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • MySQL,PHPを使いデータとデータ件数を取得する関数

    よろしくお願いします。 このようなテーブルがあります。 テーブル名GAME id name    price  genre_id  comment 1 FF1    100  1  おもしろい 2 カービー 200 3 丸い赤 3 バイオ   250 2 怖い : : : : : テーブル名GENRE genre_id genre_name 1 RPG 2 ホラー 3 バイオ このようなテーブルがあるとして、 検索したいカラム(id,name,g_id,comment)に対して検索キーワードに部分一致をしたものデータからソートしたいカラムと昇順降順のようにソートしページ数から (ページ数-1)*10+1 ~ ページ数*10 最終ページのときは (ページ数-1)*10+1 ~ 最終ページ の部分のデータを取得する関数を作りたいです。表示するデータは id name genre_name です。 ページャーも使うので検索カラムにたいして検索ワードに部分一致した結果件数も戻り値として返したいです。 上記のsql文を教えてください。 またデータと結果件数を返す関数を作ることは可能でしょうか? 関数の引数は以下のように5つにするつもりです。 function getList($search_column,$search_word,$sort_column,$sort_order,$page_number) どうかご教授ください。

    • 締切済み
    • PHP
  • テーブルの内容とテーブルのカラムの件数

    以下のようなテーブルがあります。 そのテーブルの内容と、そのテーブルのあるカラムの件数を条件にして抽出したいのですが、どのように指定すればよろしいでしょうか? テーブルA id(int) AUTO_INCREMENT, user_id(varchar), price(int), date(datetime) 表示したい一覧 user_id | date | price A | 2014-03-10 10:00:00 | 2600 B | 2014-03-11 11:00:00 | 2720 A | 2014-03-13 12:00:00 | 2500 C | 2014-03-14 15:00:00 | 2860 B | 2014-03-18 13:00:00 | 2450 A | 2014-03-19 19:00:00 | 2550 ・・・ などのレコードがあった場合、 user_idが同じ場合のレコード数が2~5の場合等を抽出したいと思います。 うまく表現できませんが、このような場合の抽出の仕方をわかる方、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文で他テーブルの件数も同時に求めたい

    SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA  ID name Age -------------- 1  太郎 20 2  二郎 35 3 花子 26 テーブルB ID memo ------------------ 1  私は男です 1  東京に住んでます 2  友達が3人います 3 私は彼氏がいます 3  先日TDLに出かけました。 3  ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。

  • 2つのテーブルからのデータ取得および件数の取得

    お世話になっております。 以前、何度か複数のテーブルからのデータ取得に関し、質問させて頂きましたが、スキルに乏しく、以下のような内容で躓いております。 アドバイスも含め、スクリプトなどのご指摘を頂戴出来れば幸いです。 お忙しい中恐縮ですが、宜しくお願いいたします。 TB:diary no id(*) date subject contents 1  4  2007-10-07 ・・・・・・ 2  8  2007-10-07 ・・・・・・ 3  3  2007-10-06 ・・・・・・ 4  5  2007-10-06 ・・・・・・ *投函者ID TB:diary_comment no diary_no ...... 1  2 2  4 3  8 4  1 diary_id とは、diary(TB)のno(auto_increment)を指しています。 以上、複数の人が登録できるブログサイトのようなものを作っており、ブログを書いている人の日記一覧を表示させたとき、各記事に対していくつのコメントの投函があるかを、日記の一覧と同時に表示させたく、diaryのnoと同一番号のdiary_comment(ブログに対して記述されたコメント)内のdiary_noをカウントしたく、以下のソースを設置してみましたが、これだとコメントのあるものしか表示されません。 先にも述べましたが、スキルに乏しく、この手の検索にソースコードそのものにも自信がなく、アドバイスのみならずご指摘いただければと考えておりますので、宜しくご指導のほどお願い申し上げます。 //MySQL 4.0 $sql = "select D.`no`, D.`id`, D.`date`, D.`subject`, D.`contents`, count(*) as `count` from `diary_comment` C inner join `diary` D on D.`no` = C.`diary_no` where D.`no` = C.`diary_no` AND D.`id` = '$fri_id' group by D.`no`, D.`id`, C.`diary_no` order by D.`date` desc LIMIT $st, $lim;"; //$fri_idは、diary.TBのidを呼び出すためのGETから渡されたもの。

    • ベストアンサー
    • MySQL
  • データの抽出およびデータ件数

    こんにちは。お世話になっております。 お忙しい中恐縮ですが、アドバイスを頂戴出来ればと投函させていただきます。 siwake: no id group_type 1  2  未分類 2  1  未分類 3  1  売上 4  1  仕入 5  2  売上 6  1  仕入 group_select: no id group_type 1  1  未分類 2  1  売上 3  1  仕入 4  2  未分類 5  2  売上 以上のようなテーブル(shiwakeは日々蓄積されるデータ。group_typeは基本となるべく区分用データ)があり(各idはそれぞれのデータを紐付けるためのもの)、下記のようにgroup_selectにてidを検索した際、group_typeを表示、かつshiwakeテーブル内にある、同じidで登録のある、group_typeの件数を表示させたく考えてます。 id=1を検索 group_type 件数 未分類   1 売上    1 仕入    2 そこで、これまで検索に関し、多くのアドバイスを頂いていることから下記コードを記述してみましたが、エラーもないまま結果が返ってきません。 毎度お恥ずかしい質問で恐縮ですが、今一度ご指導いただければと、投函させていただきました。 お忙しい中恐縮ですが、宜しくお願い申し上げます。 $sql = "select FG.`no`, FG.`id`, FG.` group_type`, F.`no`, F.`id`, count(F.`no`) as `count` from `siwake` AS F right join `group_select` AS FG on FG.`no` = F.`id` where FG.`id` = '$id' group by FG.`no` order by FG.`no` desc";

    • ベストアンサー
    • MySQL
  • 複数のテーブルに跨る集計

    こんばんは。お世話になっております。 テーブル(member) id id_name name  1 takashi さんま 2 sayuri きゅうり 3 akemi  とまと テーブル(data) id date 2 07-1-20 3 07-1-20 2 07-1-20 1 07-1-21 2 07-1-21 3 07-1-21 以上のようなテーブルがあり、下記のように、テーブルdataのidをカウントし、多いもの順に結果を表示させたいのですが、このような場合のソースが分かりません。 結果 きゅうり 3件 とまと  2件 さんま  1件 似たような質問をされている方も過去に多くあるようですが、私のケースとどれが適しているかさえも分からず投函させていただきました。 お忙しい中恐縮ですが、説明のあるサイト、またはアドバイスなどご指導いただけたら幸いです。宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 3つのテーブルからのデータ抽出

    こんばんは。 久しぶりの投函ですが、以下の内容を処理することが出来ずに悩んでおります。 テーブルを結合して・・というのは、分かるのですが、ネットで検索してもその殆どが2つのテーブルに関するものなので、その設定が出来ずに時間を費やしている状況です。 お忙しい中恐縮ですが、アドバイスなど頂戴できたら幸いです。 table:main id name 1 たかし 2 しげる 3 あけみ 4 ひろみ 以下のtableのid、p_idは、mainTBのidを指しています。 table:frend no id p_id 1 2  3 2 4  1 3 1  2 4 2  4 5 3  1 以下のtableのidは、mainTBのidを指しています。 table:comment no id naiyou 1 3 よろしく 2 4 こんにちは 3 2 おめでとう 4 3 楽しい 以上のテーブルが存在し、mainのid、しげるを検索した際、 frendTBに参照し、しげる(id=2)に該当するp_id(この場合、3、4)を探し、且つcommentTBにあるidである、naiyouを表示したいと考えてます。 実際の表示はこんな感じ・・ しげる(id=2)を検索した場合、 よろしく  あけみ こんにちは ひろみ 楽しい   あけみ 以上、アドバイスだけでも結構です。ご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • SQL GROUPで件数の一番多いレコードのみ取る

    SQL GROUPで件数の一番多いレコードのみ取る ORACLE10です。 次のようなテーブルがあります。 USER -----------テーブル名 ID,NAME,DATA----列名 1,A,any 1,A,any 1,B,any 2,C,any 3,D,any このテーブルから、IDをGROUPにして、さらに、一番使用頻度の多いNAMEを取得したいのです。 表示したいのは、IDとNAMEです。 つまり、取得結果例は次のようになります。 取得結果例 ID,NAME----列名 1,A 2,C 3,D SQL文をどのように作れば可能でしょうか? ちなみに、IDやNAMEのマスタテーブルはありません。 自分では、「(select ID, NAME, count(*) from USER group by ID, NAME) COUNT」で、COUNTを内部テーブルにして、グループ内で一番多いcount(*)をmaxで取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

  • 名寄せして件数を取得する事は可能でしょうか?

    リスト化した文字列が含まれているレコードをグループ化し、 件数を表示したいのですが・・ select nayose,count(*) from test where name like '%田%' だと、田が含まれる件数しか取得できず・・ 例えば、以下のようなnayose_listテーブルがあった場合、 nayose_listの漢字を含む件数を取得できないでしょうか? nayose_list 田 人 一

    • ベストアンサー
    • MySQL