• ベストアンサー

データベースからの抽出&表示方法

php、mysqlともに初心者なんですが、どのような構文(?)にしたらいいのか解決できるのか分かりません。 ニュース記事のデータベースにnewsというテーブルがあります。 id category       url                  title  count  article 1   a   http://headlines.yahoo.co.jp/hl?***   ******  80   ******* 2   a   http://news.goo.ne.jp/article/***    ******  70   ******* 3   a   http://news.goo.ne.jp/article/***    ******  50   ******* 4   a   http://www.mainichi-msn.co.jp/***    ******  40   ******* 5   a   http://www.mainichi-msn.co.jp/***    ******  20   ******* 6   a   http://www.yomiuri.co.jp/**       ******  20   ******* 7   a   http://www.yomiuri.co.jp/**       ******  10   ******* 8   b   http://www.yomiuri.co.jp/**       ******  10   ******* このテーブルからcategoryがaに属するtitleをcount順に表示したいのですが、 表示する際に news.goo.ne.jp と mainichi-msn.co.jp と yomiuri.co.jp をurlに含む記事にはtitleの最後に「注目」という文字を追加し、 それ以外の記事はそのまま表示したいと思っています。 下記のようにやってみたのですが、これでは全てのtitleに「注目」という文字が表示されてしまいます。 <?php $rs = mysql_query("select * from news where category = 'a' order by count desc",$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ echo "<a href=" ; echo $rec['url'] ; echo ">" ; echo $rec['title'] ; echo "</a>" ; echo "注目" ; echo "<br>" ; } mysql_free_result($rs); mysql_close($con); ?> どのような構文にしたらgoo・msn・yomiuriの記事だけに注目という文字を付け加えることができるのでしょうか。 どなたかアドバイスして頂けませんでしょうか。よろしくお願い致します。

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.2

while文は以下のようにしたらどうでしょうか while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ //共通部分 $strlink = '<a href="'.$rec['url'].'">'.$rec['title'].'</a>'; //$rec['url']内に対象文字列が1つ以上あるか調べる $cnt_g = substr_count($rec['url'],"news.goo.ne.jp"); $cnt_m = substr_count($rec['url'],"mainichi-msn.co.jp"); $cnt_y = substr_count($rec['url'],"yomiuri.co.jp"); //どれかが1つ以上あれば末尾に注目をつける if(($cnt_g > 0) or ($cnt_m > 0) or ($cnt_y > 0)){ $strlink .= " 注目" ; } echo $strlink."<br>"; } 対象文字列があってもなくても作る文字列部分をとりあえず作っておいて、$rec['url']に対して対象文字列の出現回数を取得。 いずれかが0より大きければ末尾に注目を足す。 という感じです。 ちなみにsubstr_countは以下を参考にどうぞ。。

参考URL:
http://php.s3.to/man/function.substr-count.html
yes87
質問者

お礼

gogo-teaさん、ありがとうございました。 お陰さまでちゃんと動きました。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

例えば、strpos()あたりの関数を使って、 URL文字列の中に探したい内容を含んでいるかどうか判定する、 という方法があります。 他に、正規表現を使う方法もあると思います。

yes87
質問者

補足

if構文もいっしょに使ってみたりしたのですが思うように動きませんでした。 ifなどの条件分岐を使ってもそれぞれの条件にマッチしたデータがまとめて表示されると思うのですが(それすらできなかったのですが)、それだと全体のcount順でうまく表示できないような気がしてしまいまして。 自分が何を言いたいのかすら分からなくなっているようではasuncionさんもアドバイスのしようがありませんよね。もっと修行が必要みたいです。

関連するQ&A