質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2425閲覧

PHPのカテゴリー作成・表示方法

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/22 08:18

編集2016/08/22 08:57

###前提・実現したいこと
現在PHPを使った投稿型サイトを作成しています。
データベースに接続し、選択、取得したカテゴリー名を表示したいのですが重複してしまい困っています。どなたか初心者にもわかりやすくご説明していただけないでしょうか。

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

<?php $db_host='ホスト名'; $db_name='データベース名'; $db_user='ユーザー'; $db_pass='パスワード'; //データベースへ接続する $link=mysql_connect($db_host,$db_user,$db_pass,$db_name); if(!$link){ die('接続失敗です。'. mysql_error()); } //print('</p>接続に成功しました。</p>'); $db_selected=mysql_select_db('データベース名',$link); if(!$db_selected){ die('データべース選択失敗'. mysql_error()); } //print('</p>データベース名 データデータベースを選択しました</p>'); mysql_set_charset('utf8'); $result=mysql_query('select コラム名,テーブル名 from テーブル名 order by コラム名'); if(!$result){ die('クエリーが失敗しました。'. mysql_error()); } while ($row = mysql_fetch_assoc($result)) { $category=($row['コラム名']); echo "<a href=\"\">$category</br></a>"; } // MySQLに対する処理 $close_flag=mysql_close($link); // if($close_flag){ // print('<p>切断に成功しました。</p>'); //} ?>

###試したこと
データベースに接続、選択、取得。それらを変数に代入して呼び出しています。本当は複数あるカテゴリーを変数配列に代入してforeachなどで繰り返し処理で表示したいのですがやり方がわかりません。このコードだと

サッカー
サッカー
野球
野球
野球
バスケット

みたいに重複して表示されてしまいます。上記の表示を以下のようにしたいです。

サッカー
野球
バスケット

よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/08/22 08:19

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、質問フォームのタイトル横にある初心者マークを押すことで「初心者である」ということはわかりますので、本文に「初心者」と書かなくても大丈夫です。
yambejp

2016/08/22 08:22

mysql_query()のようにmysql_から始まる関数は廃止されます(ました)、特に初心者の方は使わないようにしてください(多分参考にした書籍やサイトが古いです)
guest

回答2

0

ベストアンサー

ユニークなカテゴリ名を得たいというだけであれば

PHP

1$sql='SELECT DISTINCT コラム名 FROM テーブル名 ORDER BY コラム名';

のように参照してください

カテゴリを表示して、それぞれの明細を表示するなら
前回のカテゴリーを覚えておいて、比較すればいいでしょう。

PHP

1$pre_category=""; 2while(・・・){ 3$category=($row['コラム名']); 4if($pre_category!==$category){ 5print "<a href=\"\">".htmlspecialchars($category)."</a><br>\n"; 6} 7print htmlspecialchars($row['別のカラム'])."<br>\n"; 8$pre_category=$category; 9}

投稿2016/08/22 08:33

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/22 10:56

回答ありがとうございます。 sqlの方は初なのでよくわからないです。とりあえずmysql_の部分は以下に変更してみました。 mysqlで接続していた部分はsqlに変更してします。 ``` <?php $db_host='ホスト名'; $db_name='データベース名'; $db_user='ユーザー'; $db_pass='パス'; $db_table='テーブル名'; //PDOでデータベースへ接続 try { $pdo = new PDO("mysql:dbname=$db_name;host=$db_host;charset=utf8","$db_user","$db_pass"); } catch (PDOException $e) { die($e->getMessage()); } if(!$pdo){ die('クエリーが失敗。'); } //DBの取得 $sql = $pdo ->prepare("SELECT * FROM ".$db_table); $sql->execute(); $result = $sql->fetchAll(PDO::FETCH_ASSOC); $pdo = null; $sql='SELECT DISTINCT コラム名 FROM テーブル名 ORDER BY コラム名'; if(!$sql){ echo('クエリーが失敗'); } ?> ``` -----ここまではなんとか出来たのですが接続、選択した後今度はカテゴリー(コラム名)を取得して表示するコードがわかりません。前回のコードをアレンジして対応しようと試みましたが上手くいきません。以下のmysqlの代わりになるsql文があるのでしょうか。 while ($row = mysql_fetch_assoc($sql)) { $category=($row['コラム名']); echo "<a href=\"\">$category</br></a>"; } よろしくお願いします。
guest

0

select コラム名,テーブル名 from テーブル名 order by コラム名
でデータを取ってくるのであれば、PHP で配列の重複をなくす関数を探してみてください。

SQLを工夫することで、重複をなくすことも可能です。
個人的には DB の正規化も行ったほうが良いと思います。

本を数冊読んで、基本を体系だって学ばれるのが一番上達が早いかと。

投稿2016/08/22 08:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/22 08:53

ご連絡ありがとうございます。 DBの正規化とは何でしょうか。またオススメの本はありますか? よろしくお願いします。
退会済みユーザー

退会済みユーザー

2016/08/22 10:26

ありがとうございます。参考にしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問