アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めての投稿です。初心者なのでうまく表現できないのですが、よろしくお願いします。カテゴリーが mysql だったらすみません。

さて、mysqlからデータを呼び出します。

1.テーブル名 net
<フィールド名> cityname ff10 ff11 ff12
<データ1> sel 1000 1000 2000
<データ2> pus 1500 1500 1000
<データ3> tpe 3000 2000 2000

2.テーブル名 cityname
<フィールド名> cityname kuni cityname2 houmen
<データ1> sel 韓国 ソウル 7
<データ2> pus 韓国 プサン 7
<データ3> cju 韓国 チェジュ 7
<データ4> tpe 台湾 台北 7

ブラウザー上にあらわしたいこと
韓国 ソウル
   プサン
台湾 台北   
 
のように、重複する[韓国]をひとつだけにしたいのです。

下記コードの場合
韓国 ソウル
韓国 プサン
台湾 台北 となってしまいます。

$sql_houmen = "select kuni,cityname,cityname2 from cityname where houmen =7";
$sql_houmen = mb_convert_encoding($sql_houmen, "EUC-JP", "SJIS");
$result_houmen = mysql_query($sql_houmen);
while($rec_houmen = mysql_fetch_array( $result_houmen, MYSQL_ASSOC ))
{//
foreach ($rec_houmen as $k=>$v) {//
$rec_houmen[$k] = mb_convert_encoding($v,'SJIS','EUC-JP');
}//

//$fsdateにデータがあるか確認
$sql_crr = "select crr,cityname from {$fsdate} where cityname like '%$rec_houmen[cityname]%' and cls='y' and crr = '{$crr}'";
$sql_crr = mb_convert_encoding($sql_crr, "EUC-JP", "SJIS");
$result_crr = mysql_query($sql_crr);

if (mysql_num_rows($result_crr) > 0) {//

echo "$rec_houmen[kuni]$rec_houmen[cityname2]";
}//
}

A 回答 (4件)

fetchしたレコードの国名が一度出てきたかを格納する配列を用意しておき、既出なら国名でなく、その文字数分の空白を出力するようにしてみました。

デバッグしてないので、うまくいかなかったらすみません。

unset $kuni_selected;
$sql_houmen = "select kuni,cityname,cityname2 from cityname where houmen =7";
$sql_houmen = mb_convert_encoding($sql_houmen, "EUC-JP", "SJIS");
$result_houmen = mysql_query($sql_houmen);
while($rec_houmen = mysql_fetch_array( $result_houmen, MYSQL_ASSOC ))
{//
foreach ($rec_houmen as $k=>$v) {//
$rec_houmen[$k] = mb_convert_encoding($v,'SJIS','EUC-JP');
}//

//$fsdateにデータがあるか確認
$sql_crr = "select crr,cityname from {$fsdate} where cityname like '%$rec_houmen[cityname]%' and cls='y' and crr = '{$crr}'";
$sql_crr = mb_convert_encoding($sql_crr, "EUC-JP", "SJIS");
$result_crr = mysql_query($sql_crr);

if (mysql_num_rows($result_crr) > 0) {//

if (isset($kuni_selected($rec_houmen[kuni]))) {
echo str_repeat(" ",strlen($rec_houmen[kuni])) . "$rec_houmen[cityname2]";
} else {
echo "$rec_houmen[kuni]$rec_houmen[cityname2]";
$kuni_selected($rec_houmen[kuni]) = TRUE;
}
}//
}

この回答への補足

ham_kamo 様
レスありがとうございました。初心者なので一番わかりやすそうでしたので、試してみたのですが上手くいきません。。。(ちょっとコードを変えるなり試行錯誤してみたのですが。。)

「レコードの国名が一度出てきたかを格納する配列」とは、$kuni_selected($rec_houmen[kuni])でしょうか?そこに1番最初の「韓国」が入ったとして、その後の$kuni_selected($rec_houmen[kuni]) = TRUE;がわかりません。。。(スミマセン)

私のやりたい事の通りなのですが、もう一度お願いできませんでしょうか?本当に申し訳ないのですが、よろしくお願いします。

補足日時:2006/12/14 16:07
    • good
    • 0

No.1です。


大変失礼いたしました。全くデバッグしてなかったので、やはり誤りがありました。(最近PHPやCでなくVBでコードを書く機会が多く、配列を[]でなく()で書くという初歩的なミスを犯していました)

最後のif文を以下のように訂正いたします。
if (isset($kuni_selected[$rec_houmen[kuni]])) {
echo str_repeat(" ",strlen($rec_houmen[kuni])) . "$rec_houmen[cityname2]";
} else {
echo "$rec_houmen[kuni]$rec_houmen[cityname2]";
$kuni_selected[$rec_houmen[kuni]] = TRUE;
}
    • good
    • 0
この回答へのお礼

No.1さま
出来ました!!!何故か unset $kuni_selected; を抜かしてみたら、希望通りの表示になりました。本当にありがとうございました。
1週間位悩んでいたのですが、これですっきりです。

本当に感謝です!

お礼日時:2006/12/14 17:35

まぁ折角なのでMySQL側でやる方法を。



SET @KUNI="";
SELECT @KUNI:=IF(kuni=@KUNI,"",`kuni`) AS `kuni`,`cityname2`
FROM `cityname`
INNER JOIN `net` ON `cityname`.`cityname`=`net`.`cityname`;
    • good
    • 0
この回答へのお礼

yambejp様
レスありがとうございました。まだ初心者なので、No.1さんの回答が入りやすかったので、とりあえずNo.1さんの方法を取らせていただきました。今後勉強していきたいと思います。

お礼日時:2006/12/14 17:39

//$fsdateにデータがあるか確認


が何をしているか分かりませんが、
cityname.cityname が net.cityname にある場合だけデータを出力したいということでしょうか?
$data = array();
$sql = "select cityname.cityname,kuni,cityname2 from cityname";
$sql .= " left join net on cityname.cityname = net.cityname ";
$sql .= " where houmen =7 and net.cityname is not null";
$rs = mysql_query($sql);
while($row=mysql_fetch_array($re)){
$data[$row['kuni']][] = $row['cityname2'];
}

foreach($data as $k => $v) {
print "$k ";
$i=0; #フラグ
foreach ($v as $d) {
if ($i){print'  ';} #スペースを入れる
print $d;
print "<br>\n";
$i++;
}
}
    • good
    • 0
この回答へのお礼

moon_night様
レスありがとうございました。yambejp様と同じで、まだ初心者のため、No.1さんの回答が入りやすかったため、とりあえずNo.1さんの方法を取らせていただきました。今後勉強していきたいと思います。

お礼日時:2006/12/14 17:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!