こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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の記事だけに注目という文字を付け加えることができるのでしょうか。

どなたかアドバイスして頂けませんでしょうか。よろしくお願い致します。

投稿日時 - 2007-04-28 18:52:05

QNo.2957614

困ってます

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

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

投稿日時 - 2007-04-29 01:28:52

お礼

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

投稿日時 - 2007-04-29 02:43:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

他に、正規表現を使う方法もあると思います。

投稿日時 - 2007-04-28 20:44:28

補足

if構文もいっしょに使ってみたりしたのですが思うように動きませんでした。

ifなどの条件分岐を使ってもそれぞれの条件にマッチしたデータがまとめて表示されると思うのですが(それすらできなかったのですが)、それだと全体のcount順でうまく表示できないような気がしてしまいまして。

自分が何を言いたいのかすら分からなくなっているようではasuncionさんもアドバイスのしようがありませんよね。もっと修行が必要みたいです。

投稿日時 - 2007-04-29 00:18:54

あなたにオススメの質問