初めての投稿です。初心者なのでうまく表現できないのですが、よろしくお願いします。カテゴリーが 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]";
}//
}
No.1ベストアンサー
- 回答日時:
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;がわかりません。。。(スミマセン)
私のやりたい事の通りなのですが、もう一度お願いできませんでしょうか?本当に申し訳ないのですが、よろしくお願いします。
No.4
- 回答日時:
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;
}
No.1さま
出来ました!!!何故か unset $kuni_selected; を抜かしてみたら、希望通りの表示になりました。本当にありがとうございました。
1週間位悩んでいたのですが、これですっきりです。
本当に感謝です!
No.3
- 回答日時:
まぁ折角なのでMySQL側でやる方法を。
SET @KUNI="";
SELECT @KUNI:=IF(kuni=@KUNI,"",`kuni`) AS `kuni`,`cityname2`
FROM `cityname`
INNER JOIN `net` ON `cityname`.`cityname`=`net`.`cityname`;
yambejp様
レスありがとうございました。まだ初心者なので、No.1さんの回答が入りやすかったので、とりあえずNo.1さんの方法を取らせていただきました。今後勉強していきたいと思います。
No.2
- 回答日時:
//$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++;
}
}
moon_night様
レスありがとうございました。yambejp様と同じで、まだ初心者のため、No.1さんの回答が入りやすかったため、とりあえずNo.1さんの方法を取らせていただきました。今後勉強していきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Q&Aサイトを作成していてURLの...
-
データベースに存在するデータ...
-
MySQLへの接続
-
MySQLのINSERT時にたまに重複に...
-
【初歩】配列の格納データ数だ...
-
INSERT,DELETEを同時に
-
mysqlの命令文をPDOに書き換...
-
JAVA SQLServerException 列名 ...
-
PHP+SQLite でSELECT文のWHERE...
-
トランザクション処理
-
エクセルVBAについて
-
SQL文の実行に失敗しました???
-
VBAをつかってクエリの情報を抽...
-
PHPでMY SQLの連想配列をリンク...
-
PHP + MySQLを使用して詳細画面...
-
MySQLでshal()関数のエラーがで...
-
SQL文2つ実行
-
SQL文が実行できません
-
エラーの意味と対策
-
PHP+mysqlでSQL文に文字数制限...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
Q&Aサイトを作成していてURLの...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
ResultSetインターフェイスでの...
-
データベースに存在するデータ...
-
PHP&MySQLでの文字列+数列の一...
-
VBA ACCESS SQL...
-
phpで複数の検索語を検索対象に...
-
like検索の複数キーワードで、...
-
MySQLのINSERT時にたまに重複に...
-
C# で発生したException.Messag...
-
PHP+PDO+MYSQL で実行されたSQ...
-
PHPのUndefined index や varia...
-
INSERT,DELETEを同時に
-
配列をループさせてUPDATE
-
VB.NET エラーになる箇...
-
php postgres Insert と updat...
-
C#でDBの特定列をUpdate
おすすめ情報