重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

雑誌の記事索引をデータベースに整理し、読者にバックナンバー記事を検索してもらえるようにしたいと思います。
開発環境は、PHP5.2.17、MySQL5.0.77、IIS7です。

データベースの構成は、mymagazineというテーブルに、

magazinecode(通し番号)
yyyymm(発行年月日)
category(分類)
title(題名)
author(著者)

とあり、以下のようにデータが格納されています。
()内は、NULLとお考えください。

1 2013年5月号 目次 (題名なし) 鈴木
2 2013年5月号 特集:折り紙 作成法1 山本
3 2013年5月号 特集:折り紙 作成法2 佐藤
4 2013年5月号 特集:折り紙 作成法3 岩田
5 2013年5月号 連載 はさみ研ぎ方 伊藤
6 2013年5月号 連載 のりの選び方 野口
7 2013年5月号 (分類なし)会議報告 加藤
8 2013年5月号 (分類なし)読者便り 山田
9 2013年5月号 編集後記 (題名なし) 近藤
10 2013年6月号 目次 (題名なし) 江藤
11 2013年6月号 特集:切り絵 デザイン方法 山口
13 2013年6月号 特集:切り絵 材料購入先 高田
14 2013年6月号 連載 はさみ研ぎ方 伊藤
15 2013年6月号 連載 のりの選び方 野口
16 2013年6月号 (分類なし)読者便り 関谷
17 2013年6月号 編集後記 (題名なし) (筆者なし)

これを、以下のように、「号ごと」にまとめる知恵が浮かびません。

2013年5月号
  目次
  特集:折り紙
    ・作成法1 山本
    ・作成法2 佐藤
    ・作成法3 岩田
  連載
    ・はさみ研ぎ方 伊藤
    ・のりの選び方 野口
  会議報告 加藤
  読者便り 山田
  編集後記

2013年6月号
  目次
  特集:切り絵
    ・デザイン方法 山口
    ・材料購入先 高田
  連載
    ・はさみ研ぎ方 伊藤
    ・のりの選び方 野口
  読者便り 関谷
  編集後記

HTMLにリストに出すだけなら、以下でできることはわかります。
「if ($recmax > 0) {}」の中をどのようにいじれば、
上記のようなフォームに出力できますでしょうか。

「2013年6月号」をグループ化、
「特集:切り絵」でグループ化、みたいにするのだと思いますが・・・


<?php
$con = mysql_connect(SERV, USR, DBPW);
$selectdb = mysql_select_db(DBNAME, $con);
$sql = "select * from mymagazine";
$rst = mysql_query($sql, $con);
$recmax = mysql_num_rows($rst);
if ($recmax > 0) {
  $body = "<table border=\"1\">";
  for ($recnum = 0; $recnum < $recmax; $recnum++) {
    $col = mysql_fetch_array($rst);
    $body .= "<tr>";
    $body .= "<td>" . $col["magazinecode"] . "</td>";
    $body .= "<td>" . $col["yyyymm"] . "</td>";
    $body .= "<td>" . $col["category"] . "</td>";
    $body .= "<td>" . $col["title"] . "</td>";
    $body .= "<td>" . $col["author"] . "</td>";
    $body .= "</tr>";
  }
  $body .= "</table>";
} else {
  $body = "データなし";
}
?>

<html>
<body>
<?= $body ?>
</body>
</html>

A 回答 (5件)

>$sql = "select * from mymagazine";



orderの指定がないのが謎です。順不同で取得してもいいというわけではないですよね(最低でもmagazinecode, categoryの指定が必要です。

またネイティブなMySQL関数はすでにオワコンが違いので、今のうちにMySQLiもしくはPDO(個人的にはPDOを推奨)に書き替えてください。



閑話休題

おおまかに流れを書くとこんな感じでいいのではないですかね。

$sv_magazine = '';
while ($col = mysql_fetch_array($rst)) {
$magazine = $col['magazinecode'];
if ($magazine !== $sv_magazine) {
if ($sv_magazine !== '') {
// 前のマガジン番号($sv_magazine)のフッタ(必要があれば)
}
// 今読んだマガジン番号($magazine)のヘッダ
$sv_magizine = $magazine;
}
// $col から明細を出力
} // ループ終了
if ($sv_magazine !== '') {
// 最後のマガジン番号($sv_magazine)のフッタ(必要があれば)
}
    • good
    • 0
この回答へのお礼

agunuzさん、ご回答およびいろいろとアドバイスありがとうございました。

>orderの指定がないのが謎です。

はい、本番環境では通し番号が振ってあるので
これで並び替えします。

>今のうちにMySQLiもしくはPDO

大変お恥ずかしながら、MySQLiもPDOというのが初耳でした。
ちょっと調べたら情報いろいろあるので勉強して導入します。
http://otukutun.hatenablog.com/entry/2013/01/29/ …

>おおまかに流れを書くとこんな感じでいいのではないですかね。

具体的なコードで示していただき、非常に助かります。
早速解読しながら組み込んでみます。
また何か不明な点があれば、書き込ませていただきます。

お礼日時:2013/09/25 11:00

PDOを使ったサンプル


http://codepad.org/HeIMjkbl
    • good
    • 0
この回答へのお礼

To_aru_Userさん、御礼遅くなって失礼しました。

PDOを使ったサンプルをご提示いただきありがとうございました。

PDOの導入を含め、皆さんの回答を一通り、きちんと試してから締め切りたかったですが、
本件に取り組むまでに少し時間がかかりそうですので一旦〆切にします。
たびたびのご教示本当にありがとうございました。

お礼日時:2013/10/07 01:19

http://php.net/ChangeLog-5.php
PHP5.2.17がどれだけのバグをかかえているかこれを見てもらえれば分かると思います。
常に最新版を使うようにしましょう。
レンタルサーバー側がPHP5.2.17のままアップデートしていない場合等は、サーバー移転を検討しましょう。
    • good
    • 0
この回答へのお礼

To_aru_Userさん、たびたび恐れ入ります

>レンタルサーバー側がPHP5.2.17のままアップデートしていない

まさにこのケースなのですが、手元の開発環境だけでも
最新版にすることとします。

以上に参考になるアドバイスありがとうございます。

お礼日時:2013/09/25 11:10
    • good
    • 0
この回答へのお礼

To_aru_Userさん、非常に参考になるURLを教えていただきありがとうございました。

「やっちゃいけないこと」のオンパレードでした、、、

一つ一つつぶしていきたいと思います。

お礼日時:2013/09/25 11:07

sqlにgroup by は使用不可でしょうか?

    • good
    • 0
この回答へのお礼

muuming2001さん、ご回答ありがとうございます。

group by は存じ上げているのですが、SQLでくくった後、
PHP側でどう取り出すかが???な感じです、勉強してみます。

お礼日時:2013/09/25 10:55

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