mysql,GROUP BY,mysql_fetch_arrayを使って、あるフィールドに入ってる項目を複数出したい。

このQ&Aのポイント
  • mysql,GROUP BY,mysql_fetch_arrayを使って、あるフィールドに入ってる項目を複数出したい。
  • countで数を取り、GROUP BYでまとめ、order byで並び変えをしていますが、GROUP BYでまとめているせいで、本来フィールドに複数入っているものが1つしか出てきません。
  • 実際のページでは、タグコメントが複数登録されているものも、1つしか表示されないようです。解決策を教えてください。
回答を見る
  • ベストアンサー

mysql,GROUP BY,mysql_fetch_arrayを使っ

mysql,GROUP BY,mysql_fetch_arrayを使って、あるフィールドに入ってる項目を複数出したい。 わかりづらいタイトルで申し訳ありません。 ある項目を、登録数の多い順に一覧表示をし、それに関するコメントを表示と思っています。 countで数を取り、GROUP BYでまとめ、order byで並び変えをしています。 しかし、おそらくGROUP BYでまとめているせいで、本来フィールドに複数入っているものが1つしか出てきません。現在の環境とやりたいことをまとめさせていただきます。 【関連するテーブル】 game  構造  titleid , title 1 , 鬼武者3 2 , FF10 3 , ヴィーナス&ブレイブス ~魔女と女神と滅びの予言~  ・  ・  ・ (本当はもう少し複雑ですが、今回の質問にはあまり関係がないためは省略しております) tag  構造  tagid , tag  1 , OPが素晴らしい  2 , EDが素晴らしい  3 , 世界観がいい  ・  ・  ・ tag_title  構造  tagid , titleid , tagcom , tagcom_date(日付)  1 , 1 , すばらしい , 2010-09-05 1 , 1 , やってよかった , 2010-09-05 1 , 2 , よくできている , 2010-09-05  ・  ・  ・ 上記3つのテーブルをメインに使います。 【表示したいこと】   OPがいいゲーム    鬼武者3  登録数 : 3件    タグコメント: すばらしい(2010-09-05) / やってよかった(2010-09-05)  ・  ・  ・ 実際のページです ttp://www.game-minzoku.jp/tag.php?tagid=1 【組んだソース】 (CSSやら他のを省略) $sql = "select * ,count(game.title)as count from game left join tag_title on game.titleid = tag_title.titleid left join tag on tag_title.tagid = tag.tagid where tag_title.tagid = '{$tagid}' GROUP BY title order by count desc "; $result = mysql_query($sql); $rows = mysql_num_rows($result); while($row = mysql_fetch_array($result)){ echo "登録数 : "; echo $row["count"].件; echo "<img src=\"",$row["img"],"\" alt=\"",$row["title"],"\" width=\"100\">"; echo $row["title"]; echo "タグコメント : "; if ($row["tagcom"] != ""){ echo $row["tagcom"]; echo " (" . $row["tagcom_date"] . ") / "; } } です。 前述もさせていただきましたが、おそらくGROUP BYでまとめると、1つしか出ないとかそんな感じだとは思うのですが、どうやって解消したら良いのかがわかりません。。。 (ttp://www.game-minzoku.jp/tag.php?tagid=1 が実際のページですが、タグコメントが複数登録されているものも、1つしか出てこなくなっている感じです) 拙いご説明で本当に恐縮ですが、もしお分かりになりましたらよろしくお願いします。 説明不足の点などあればおっしゃってください!

  • PHP
  • 回答数5
  • ありがとう数10

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

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

今、PHPのソースが以下だとしたら、 if ($row["tagcom"] != ""){ echo $row["taggrp"]; } 原因はtagcomが空文字のためと思われます。 なので、次のようにしてみてください。 全てのコメントが表示されるようになると思います。 if ($row["taggrp"] != ""){ echo $row["taggrp"]; } あと、SQLをPHPを介さずに、MySQLへ直接実行できる環境があるならば、 そうすることでSQLとしては正常に取得できているのかが分かると思います。 SQLの問題でなければ、PHPを疑ってみるとよいと思います。

hasu23
質問者

お礼

meeker-bot様 本当にありがとうございます! いただいたソースで組ませていただいたところ、無事にコメントがすべて出るようになりました! meeker-bot様には本当に長い時間いろいろと教えていただきまして、本当に感激しております!! このたびは本当にありがとうございました!!

その他の回答 (4)

回答No.4

お疲れ様です。 なかなか解決できず申し訳ないです。 私の環境で試したところ、うまくいきました。 試した内容など、以下のリンクに書きました。 https://spreadsheets.google.com/ccc?key=0AoXfKJsAmCQ9dEJ3WGhuY3NQMThhUnJLeExZOXpVTmc&hl=ja&authkey=CIT2n_oK なので、おそらくデータによって、うまくいかない事があるのだと思います。 私が試したデータと、hasu23さんの実データとの差異で、何か気づかれる点はあるでしょうか? >ちなみに、ttp://www.game-minzoku.jp/tag.php?tagid=1 のページでは、FF12のコメントが出てきていませんが、FF12に関連するデータは、 > > tagid , titleid , tagcom , tagcom_date(日付) > 1 , 2831 , , > 1 , 2381 , 壮大のひとこと! , 2010-09-01 これは、titleidが2831と、2381の2種類ありますが誤記でしょうか? また、コメントが出ないタイトルは、FF12以外にもあるのでしょうか。 コメントが出るタイトルと出ないタイトルのデータを比べることで、原因が分かる気がします。 原因が分かれば、例えばNULLデータが原因であればSQLでIFNULL関数を使うなど、対処できると思います。

hasu23
質問者

お礼

meeker-bot様 ご親切なご回答、本当にありがとうございます!本当に感謝しております!! また、お忙しい中環境までおつくりいただきまして本当にありがとうございます!! >これは、titleidが2831と、2381の2種類ありますが誤記でしょうか? ちゃんと書かないといけないところで誤字をしてしまって申し訳ないです。 はい、こちらは 2381の誤字でございます。。 >私が試したデータと、hasu23さんの実データとの差異で、何か気づかれる点はあるでしょうか? 確認してみたところ、ほとんど差異はないように思えます。 あるとしたら、tagcomが[varchar(256)]ではなく[text (ujis_japanese_ci)]くらいでしょうか・・? >また、コメントが出ないタイトルは、FF12以外にもあるのでしょうか。 これですが、探してみたらかなりあるようです。。 どうしてなのでしょうね・・・? 必要ないかもしれませんが、そちらも載せておきます。もし参考になれば幸いです。。 ------------------------------------------------ ttp://www.game-minzoku.jp/tag.php?tagid=1 においてでないもの titleid=2381 FF12 tagid , titleid , tagcom , tagcom_date 1 , 2381 , , 1 , 2381 , 壮大のひとこと! , 2010-09-01 ------------------------------------------------ ttp://www.game-minzoku.jp/tag.php?tagid=2 においてでないもの titleid=714 ヴィーナス&ブレイブス ~魔女と女神と滅びの予言~ tagid , titleid , tagcom , tagcom_date 2 , 714 , , 2 , 714 , 異論は認めない , 2010-09-02 2 , 714 , 感動した , 2010-09-02 2 , 714 , 泣けるし、心が暖まる , 2010-09-02 ------------------------------------------------ ttp://www.game-minzoku.jp/tag.php?tagid=13 においてでないもの titleid=1955 テイルズ オブ レジェンディア (Tales of Legendia) titleid=2616 ペルソナ3 tagid , titleid , tagcom , tagcom_date 13 , 1955 , , 13 , 1955 , 何でもないダンジョンでオペラが入るのは衝撃的だった , 2010-09-07 13 , 1955 , どれもよい , 2010-09-07 13 , 1955 , 最高だった , 2010-09-07 13 , 1955 , 世界観とストーリーに合ってた , 2010-09-07 13 , 1955 , , 13 , 1955 , ダメな部分が多い中で、逆に音楽は際立っていた , 2010-09-09 13 , 1955 , , 13 , 1955 , , 13 , 2616 , , 13 , 2616 , 全体的におしゃれ , 2010-09-07 13 , 2616 , 雑魚戦のBGMまで歌つきでやばい , 2010-09-07 13 , 2616 , サントラ買った , 2010-09-07 13 , 2616 , , 13 , 2616 , 戦闘曲がいい , 2010-09-09 13 , 2616 , , 13 , 2616 , , 13 , 2616 , , ------------------------------------------------ などです。 書いていて気がついたのですが、どうやらコメントが出ないものは一番最初の投稿がコメントが入っていないもののようです。(5~6確認しましたが、すべてに共通しています。逆にコメントが出ているものは最初の投稿にコメントが入っています) 本当にたびたびで恐縮ですが、 もし何かお分かりになりましたらお時間があるときで本当に構いませんので、よろしくお願いいたします!

回答No.3

コメントの間に日付を入れる場合、次のようになります。 このように、カンマで区切って表示したい値を追加できます。 separatorというのは、区切り文字です。これを省略した場合は、カンマで区切られます。 select * ,group_concat(tag_title.tagcom, '(', cast(tag_title.tagcom_date as char), ')' separator "/") as taggrp, count(game.title)as count データが入っているのに何も出ないものに関しては、 実際のデータを見せて頂ければ分かると思います。 また、今後カスタマイズされると思いますので、group_concat関数について説明しますと hasu23さんが「おそらくGROUP BYでまとめると、1つしか出ないとかそんな感じだとは思うのですが、」 と書かれている通りで、GROUP BYを使った場合は本来1つの値しか出ません。 その、まとまって1つになろうとしている、「まとまる前の複数のデータ」を横に繋げて表示するのが group_concatです。 参考になれば幸いです。

hasu23
質問者

お礼

meeker-bot様 なんども本当にありがとうございます!いろいろ教えていただいて本当にうれしいです。 教えていただいた select * ,group_concat(tag_title.tagcom, '(', cast(tag_title.tagcom_date as char), ')' separator "/") as taggrp, count(game.title)as count は何故か、該当データが表示されなくてできなかったのですが、group_contactとseparatorを教えていただいたので(本当にありがとうございます!)、自分なりに調べて select * ,group_concat(tag_title.tagcom SEPARATOR ' ') as taggrp, count(game.title)as count でいったん落ち着かせてみました。 日付を出すのはは、いったん断念しました。あればよいなあ、という感じでしたので。。 また、これまではスラッシュ区切りでと考えていたのですが、実際にやってみると、コメントが入っていないものもあるので、  よかった/すばらしい//最高だった みたいにスラッシュが二重ででてくるところもあったので、ちょっとごまかしを入れて半角スペースにしてみました。 またデータが入っているのに出ないものについてです。 ご説明が不足していて大変申し訳ないのですが、tag_titleテーブルですが、  構造  tagid , titleid , tagcom , tagcom_date(日付)  1 , 1 , すばらしい , 2010-09-05 1 , 1 , やってよかった , 2010-09-05 1 , 2 , よくできている , 2010-09-05 となっていますが、中にはtagcomとtagcom_dateが入っていないものもあります。 tagid,とtitleidで二つをひも付けしているので、この二つは絶対に入っています。 tagcomがはいっているものに関しては、100%日付もはいります。 コメントが表示されないものに関して、ひょっとしたらこのtagcomの空欄が問題になっていて、tagcomが空欄になっている状態のがあるものはすべて表示されなくなるのではないかと仮説してみたのですが、どうもそれも違うようです。。 >データが入っているのに何も出ないものに関しては、 >実際のデータを見せて頂ければ分かると思います。 これについては、どのような形でお見せすればよいでしょうか?? ちなみに、ttp://www.game-minzoku.jp/tag.php?tagid=1 のページでは、FF12のコメントが出てきていませんが、FF12に関連するデータは、  tagid , titleid , tagcom , tagcom_date(日付)  1 , 2831 , , 1 , 2381 , 壮大のひとこと! , 2010-09-01 の2つだけです。 tagidも違うのであれば、もっとあります。 データの開示はまったく問題ないので、あれはこれは、などあればぜひぜひおっしゃってください! meeker-bot様には本当に貴重なお時間を頂戴してしまって恐縮です。 お時間があるときで本当に大丈夫なので、もしお分かりになりましたらよろしくお願いいたします!

回答No.2

別名(as句)を変えてみてください。 select * ,group_concat(tag_title.tagcom) as taggrp, count(game.title)as count PHP側では、 echo $row["tagcom"]; echo " (" . $row["tagcom_date"] . ") / "; の2行の代わりに、 echo $row["taggrp"]; としてみてください。 今は時間がないので、この程度しか回答できないですが、 よろしくお願いします。

hasu23
質問者

お礼

何度も本当にありがとうございました! 上記記述をしたところ、複数のコメントがでるようにりました! と思って喜んでいたのですが、よくよくデータと照らし合わせてみると、ちゃんと複数でてくるものと、入っているのに何も出てこないものが混在しているようです。。これは別の記述が邪魔しているということなんでしょうか・・・? (ttp://www.game-minzoku.jp/tag.php?tagid=1 で、FF12もコメントがあるのですが、出てこないといった感じです) また、コメントとコメントの間に、日付などをいれたいのですが、これもどうしたらよいのでしょうか?? 聞いてばかりで本当に申し訳ありません!! もしお分かりになればで構いませんので、よろしくお願い致します!

回答No.1

まず、 select * ,count(game.title)as count from game の部分を、 select * ,group_concat(tag_title.tagcom) as tagcom, count(game.title)as count from game にしてみて、結果を見てみてください。 うまくいきそうだったら、以下を試してください。(日付が文字型であれば、castは必要ないです) select * ,group_concat(tag_title.tagcom, '(', cast(tag_title.tagcom_date as char), ')' separator "/") as tagcom, count(game.title)as count from game 実際に試していないので、間違っていたら申し訳ないです。 実際のページを見させて頂きました。 面白いページですね。がんばって下さい。

hasu23
質問者

お礼

お早いご回答ありがとうございます!! いただいた select * ,count(game.title)as count from game  ↓ select * ,group_concat(tag_title.tagcom) as tagcom, count(game.title)as count from game をさっそく試させていただいたのですが、上手くいかないようでした。。(画面が白くなりました) 下のも同じでした。(日付はdateで入っています。) 本来ならば、ご助言いただいたものを自分なりに調べ、カスタマイズして実現させたいところなのですが、なかなか勉強が追いつかず、どこをどう触ればいいのかがわからなくて、、申し訳ないです。。 また、ページも見ていただきありがとうございます。 そういっていただけると、努力が報われます。ありがとうございました!

関連するQ&A

  • mysql_fetch_arrayを使って、グループのあいだごとに見出

    mysql_fetch_arrayを使って、グループのあいだごとに見出しをつけたい。 イミフなタイトルで申し訳ないです。 やりたいことが明確化しているので、そちらからご説明させてください。 【用意したテーブル】 eat groupid , group , eatid , eat 1 , 野菜 , 1 , なす 1 , 野菜 , 2 , ピーマン 1 , 野菜 , 3 , にんじん 1 , 野菜 , 4 , レタス 2 , くだもの , 5 , りんご 2 , くだもの , 6 , みかん 2 , くだもの , 7 , 梨 2 , くだもの , 8 , ぶどう 3 , お菓子 , 9 , ぽてち 3 , お菓子 , 10 , ポッキー 3 , お菓子 , 11 , チョコ 3 , お菓子 , 12 , せんべい ・ ・ ・ 【やりたい見せ方】 ■野菜関連 なす ピーマン にんじん レタス ■くだもの関連 りんご みかん 梨 ぶどう ■お菓子関連 ぽてち ポッキー チョコ せんべい ・ ・ ・ 【実際に組んでいるソース】(といいますか、普通に回しているだけですが。。) $sql = "select * from eat"; $result = mysql_query($sql); $rows = mysql_num_rows($result); while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["eat"]; echo "</p>"; } このソースの状態で、 さきほどのやりたいことのように、グループの上に見出しをつけるにはどのように記述を追加すればよいのでしょうか?? また、ソースに特にこだわ入りはないので、全然変えていただいて構いません。 宜しくお願い致します。 ご不明な点などございましたらいつでもお気軽におっしゃって頂けますと幸いです。

    • ベストアンサー
    • PHP
  • mysql_fetch_array の速度について

    DBに入れたアクセスログの集計で困ったことがあります。 phpMyAdmin でSQLを作成し実行すると、1秒で済むのですがPHPにして、ブラウザからアクセスすると5分以上かかります。ちなみにアクセスログの行数は10万行ほど。 問題のPHPのコードは下記です。 -- $sql = 'SELECT path, COUNT(path)AS cnt FROM `logs` ' . ' WHERE `path` LIKE \'/news.php?id=%\' ' . ' AND TO_DAYS(NOW()) - TO_DAYS(date) <= 7' . ' GROUP BY path ' . ' ORDER BY `cnt` DESC ' . ' LIMIT 0 , 3'; $res = mysql_query($sql,$dbh) or die(mysql_error()); while ($row = mysql_fetch_array($res)) { echo $row[path]; echo "(".$row[$cnt].")<br>"; } -- mysql_fetch_array のところが問題なのかなと考えております。 お分かりになる方、是非アドバイスをお願いします。

    • 締切済み
    • PHP
  • MYSQLでgroup by を教えてください。

    まだ初心者なんです。よろしくお願いいたします。 テーブル$tbl_nameに日付date コラムに (2009-11-3 14:25:06).(2009-11-3 11:25:06). (2009-11-5 12:25:06).(... ....と年齢 ageコラムに (18)(19)(20)... 性別コラムage に (danshi)(jyoshi) が入っています。 これを日付別 に内容が存在するだけ出力したいのです。 出力内容は(18)→25、(19)→13、(20)→7、の数だけ、 同様に(danshi)→20、(jyoshi)→25、というように 〇月〇日18才は25人、19才は13人、20才は7人、 男子は20人、女子は25人と出したいのです。 $sql = "SELECT 'age',count(age) FROM $tbl_name group by 'date'"; $result = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); while ($row = mysql_fetch_assoc($result)){ $age .=$row;} 等記入しているのですが、何とも動きませんのです。 どうしたらよろしいものでしょう。よろしくお願いいたします。

  • 入力フォームが上手く動きません。。(mysql,php使っています)

    入力フォームが上手く動きません。。(mysql,php使っています) レビュー系のサイトを作っていて、入力フォームを作ってみたのですが、上手く動きません。どなたかご助言いただけますと幸いです。 【関連するテーブル】 tag  構造  tagid , tag  1 , OPが素晴らしい  2 , EDが素晴らしい  3 , 世界観がいい  ・  ・  ・ tag_title  構造  tagid , titleid , tagcom(コメント欄) , vote(今回は使いません) , tagcom_date(日付) 【組んだソース】 ============================== <?php if(isset($_GET['titleid'])){ if(preg_match('/^[0-9]+$/', $_GET['titleid'])){ $titleid = $_GET['titleid']; }else{ $titleid = 0; } }else{ //ダメな場合の処理 $titleid = 0; } (中略) $tag_array = array(); $tagcom_array = array(); if(isset($_POST['tag_regist'])) { $tag_array = $_POST['tag']; $tagcom_array = $_POST['tagcom']; extract($_POST); mysql_connect('***'); mysql_select_db('***'); $kyou = date("y-m-d"); $tagcnt = 0; for ($tagcnt=0;$tagcnt<count($tag_array);$tagcnt++) { $sql_tag = ""; $sql_tag = "INSERT INTO tag_title (tagid, titleid, tagcom, vote, tagcom_date) VALUES (".$tag_array[$tagcnt].", ".$titleid.", '".$tagcom_array[$tagcnt]."', '".$vote."', '".$kyou."')"; mysql_query($sql_tag); print $tagcom_array[$tagcnt]; } } print "<form action=\"tag_input.php?titleid=" . $titleid . "\" method=\"post\" >"; $sql2 = "select * from tag"; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); while($row2 = mysql_fetch_array($result2)){ echo "<p><input type=\"checkbox\" name=\"tag[]\" value=\"" . $row2["tagid"] . "\" >"; echo $row2["tag"]; echo "   <input type=\"text\" name=\"tagcom[]\" size=\"60\">"; echo "</p>"; } print "<p><input type=\"submit\" value=\"書き込む\" >"; print "<input type=\"reset\" value=\"リセット\"></p>"; print "<input type=\"hidden\" name=\"tag_regist\" value=\"true\" />"; print "</form>"; ============================== 【実際に作ってみたやつ(一例)】 ttp://www.game-minzoku.jp/tag_input.php?titleid=4784 【何ができないのか】 tag_titleidにデータを送りたいのですが、コメントのtagcomだけ上手くはいりません。。(たまにはることもあるので謎です。フォームなので100%の精度にしたいです) ソースは友人と協力して作ったのですが、どうしてもこのあたりで行き詰ってしまいました。 ソースの組み方にこだわりは全くないので、根本からの変更も可能です。 拙いご説明で大変恐縮ですが、お分かりになりましたらよろしくお願いいたします。 また、ご説明が足りない個所などあればおっしゃってください!

    • ベストアンサー
    • PHP
  • mysql_fetch_assoc()の非推奨

    phpを始めてまだ数ヶ月の初心者です。 (少々表現が変なところはお許し下さい。) ■やりたい事 phpである登録画面を作成しています。サーバーには スタッフのデーターが入っているテーブルがあります。 (1)DBに登録してあるスタッフの名前を全部引っ張り出す(mysql)。 (2)登録画面の入力項目の1つとして(登録スタッフ)があり、  そこを<select>で上記(1)から取り出したものを自動で表示したい。 ところが、mysql_fetch_assoc()について調べたら、非推奨などと載っていて (内容がよく理解できませんでしたが)どのように記述したら、将来困らない  コーディングとなりますか? <select name="register"> <?php $sql = "select count_ID, name from reserve"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { echo "<option value=\"".$row["count_ID"]."\">" .$row["name"]."</option>"; } ?> </select> 今からphpの知識を少しづつつけていくにあたり、非常に混乱して います。mysqlをそもそも学んでいてもしょうがないということでは ないですよね。本当に初心者なので、お手数ですがわかりやすい表現 でお願いします。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql_fetch_array の関数について

    はじめまして、お世話になります。 php/SQL共に初心者レベルなのですが、ご指導ください。 mysql_fetch_array のSQLの結果が複数件ある場合なのですが、 参考書通り $sql = "select * from category where parent_id = '0' order by category_name"; $result = mysql_query( $sql ); while ( $category = mysql_fetch_array( $result ) ) echo "<a href=result.php?category_id=${category['category_id']}>${category['category_name']}</a> | "; とコーディングしたものの、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/アカウント名/public_html/アカウント名/topbar.php on line 26 とエラーが表示され困っています。 参考書にもエラーの詳細など記載れていませんし、他の媒体での色々と答えを探してはみたものの意味がわかりません。 解る方いらっしゃいましたら是非ご指導ください。 宜しくお願いします。

    • 締切済み
    • PHP
  • mysql_fetch_arrayでレコードが入っていないものも取得したい。

    こんにちは。mysql_fetch_array()でテーブルに入っていないレコードも取得したいのですが、どのようにすればよろしいでしょうか。 テーブルはこんな感じです。 仕事 NUM  1   1  2   1  4   1  5   1 その上で、PHPはこのようになっています。 //データの選択 $sql = "SELECT job, COUNT(*) as num FROM org GROUP BY job"; $res = db_query($sql, $conn); //データの出力 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $array = array( "job"=>$row["job"], "num"=>$row["num"] ); array_push($array, array( "job"=>$row["job"], "num"=>$row["num"] )); $tmp[] = $array; } return $tmp; このPHPのあと、Smartyに値を渡し、.tplで「A職(○件)」というようなことをやっています。 このときにフィールド「仕事」のレコード「3」は1つもデータが登録されていない状態です。そのためか、現状ではNULL値として扱われるようで、配列$rowに値を渡せず、.tplのほうではデータが表示されません。そこで、レコード「3」にデータを登録せずに、NULL値ではなく、例えば0などの値を渡したいと思います。 どのようなコードを書けば値を渡せるのでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • mysql_fetch_objectにデータを取得させたいのですが、うまく行きません。

    データ型 name varchar(30), item1 char(8), item2 int(6) で、テーブルが下記のようなっています。 | name |item1 | item2 | | taro | abcd | 53 | | taro | efghk | 48 | | taro | lmnp | 02 | while文で array_push($ydata, $row->item1) として $row = mysql_fetch_object($result) にデータを取得させたいのですが(スクリプト下記)、 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT item1,item2 from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); while($row = mysql_fetch_object($result)){   ←10行目 // array_push($ydata, $row->item1);      //  ここに下記の13、14行目を追記 } var_dump($row);echo"<br />\n"; var_dump($result); print_r($row); echo"<br />\n"; これでブラウザから見ると bool(false) resource(3) of type (mysql result) としか出ません。(19行目の結果は表示されません。) そのため 13: echo "item1",$row['item1'],"<br>"; 14 echo "item2",$row['item2'],"<br>"; と追記してブラウザから見ると、単に [ item1 ]とだけ表示されます。 10 行目を while($row = mysql_fetch_arrayt($result)){ に変えてブラウザから見ると item1abcd item253 imem1efghk item250 item1lmnp item258 bool(false) resource(3) of type (mysql result)   となります。 $row = mysql_fetch_object($result) にデータを取得させるにはどのように修正すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • mysql_fetch_array取得結果を2行で

    mysql_fetch_arrayで取得した結果を、 2行で表示させるには、どうすればよいでしょうか? ※そのままだと横に長くなり過ぎるので、 複数行にして、テーブル横幅を抑えたい、です。 <現状> mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); mysql_select_db("mydb"); $result = mysql_query("SELECT * FROM mytable"); $body .= "<table> <tr> <th>ID</th> <th>氏名</th> </tr>"; while ($row = mysql_fetch_array($result)) { $body .= "<tr> <td></td> <td>".$row[name]."</td> <td>".$row[preid]."</td>

    • ベストアンサー
    • PHP
  • mysql_fetch_arrayを何度も使いたい

    phpとmysqlを使っています。 配列$valuesがあります。 その値は一部だけmysqlのフィールドdの中に格納しています。 両方の値を比較してもし一致すればチェックボックスを作るという処理をしています。 また、同時に一致した数もそれぞれ取得したいと考えています。 イメージ的には、□はチェックボックスとして()には、その配列の値とフィールドdの値に一致する数が入ります。 □(33) □(13) □(1) □(22) □(3)  □(16) □(15) □(9) □(23) □(32)  □(4) □(16) □(7) □(6) □(11)  □(5) □(21) □(1) □(4) □(15)  □(13) □(10) □(3) □(19) □(8)  □(0)のとき非表示になるようにしています。 <?php $m = mysql_connect('localhost','root',password); $mm = "SELECT * FROM tableA"; mysql_set_charset('utf8'); $mmm = mysql_query($mm,$m); $values=array( "chk1"=>array("a1","a2","a3","a4","a5","a6","a7","a8","a9","a10") ,"chk2"=>array("b1","b2","b3","b4","b5","b6","b7","b8","b9","b10") ,"chk3"=>array("c1","c2","c3","c4","c5","c6","c7","c8","c9","c10") ); foreach($values as $key=>$array){ foreach($array as $val){ $checked=(isset($_REQUEST[$key]) and in_array($val,$_REQUEST[$key]))?" checked":""; $count = ""; while($r = mysql_fetch_array($mmm)){ if($val === $r['d']){$count++:} } if($count>0 && !$count==""){ $h = $h.htmlspecialchars($val, ENT_QUOTES, 'UTF-8').'<input type="checkbox" name="'.$key.'[]" value="'.$val.'"'.$checked.'/>('.$count.') '."\n"; } } } print "<br />\n"; } ?> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form method="get" action="checkbox2.php"> <?php echo $h; ?> <input type="submit" value="送信" /> </form> </body> </html> これではmysql_fetch_arrayが一度しか使えないので、配列の値a2以降が進みません。 こういうときはどのようにするべきでしょうか。 また、if($val === $r['d']){$count++:}でカウントしていますが、もっといい方法はありますか。 その他変な箇所があれば指摘して頂けると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう