- ベストアンサー
データベースからの抽出&表示方法
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の記事だけに注目という文字を付け加えることができるのでしょうか。 どなたかアドバイスして頂けませんでしょうか。よろしくお願い致します。
- みんなの回答 (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は以下を参考にどうぞ。。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
例えば、strpos()あたりの関数を使って、 URL文字列の中に探したい内容を含んでいるかどうか判定する、 という方法があります。 他に、正規表現を使う方法もあると思います。
補足
if構文もいっしょに使ってみたりしたのですが思うように動きませんでした。 ifなどの条件分岐を使ってもそれぞれの条件にマッチしたデータがまとめて表示されると思うのですが(それすらできなかったのですが)、それだと全体のcount順でうまく表示できないような気がしてしまいまして。 自分が何を言いたいのかすら分からなくなっているようではasuncionさんもアドバイスのしようがありませんよね。もっと修行が必要みたいです。
お礼
gogo-teaさん、ありがとうございました。 お陰さまでちゃんと動きました。