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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

4回答

2630閲覧

データベースのフィールドに同じ値が入っている場合、どちらかの値だけを表示する方法を教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2016/11/24 01:50

編集2016/11/24 02:13

何度調べてもわからないので、どうかご教授願います・・・
###前提・実現したいこと
PHPとデータベース(phpMyAdmin)を使って問題アプリを作成しています。
データベースに入っている問題のタイトル・問題・選択項目を取得し、PHPで表示したいなと思っています。

そこで躓いたことがあるのですが、
questionTitle,question,answer・・・というようにフィールドを作成しています。
questionTitleに「クイズ1」と入ったレコードが2つあった場合、どちらか片方のquestionTitleを表示したいです。

###コード
以下が現在のコードなのですが、<h3>の部分がまるっと表示されません・・・

<?php require "../pass.php"; if(isset($_POST['question_id'])){ $question_id = $_POST['question_id']; } $sql = "SELECT * FROM question WHERE question_id = 1"; $result = mysql_query($sql,$link); echo '<h3>'.$col['questionTitle'].'</h3>'; echo '<form action ="question.php" method="post">'; echo '<div align="center" class="question">'; $question_count = 1; while($col = mysql_fetch_assoc($result)){ print("<p>Q".$question_count.".".$col['question']."</p>"); for($i=1; $i<count($col); $i++) { print("<input type='radio' name='question{$question_count}' value={$i}>".$col['answer1']."<br>"); } $question_count++; } echo '</div>'; mysql_close($link); ?>

###試したこと
別課題でechoだと文字が表示されなかったことがあったので、それも踏まえて一度printに変更して表示しようとしたのですが、表示されませんでした・・・
$sqlでレコードを2つ指定しているのですが、questionTitleに両方とも値が入っているため表示してくれないのでしょうか?

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

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

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

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

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

kunai

2016/11/24 01:57

コードが省略されすぎててどういう結果を期待しているのかまるでわかりません。。そのコードを見て回答するなら「$colという変数が、echoされる以前に定義されていないから」という回答になりますが、実際にはSQL文の後にもコードがあるんですよね?そこを提示いただけますか
guest

回答4

0

まず質問回答の前に
mysql_query
は既に非推奨となった関数なのでできる事ならPDOなどに変更しましょう。

次に

php

1$result = mysql_query($sql,$link); 2 3echo '<h3>'.$col['questionTitle'].'</h3>';

mysql_queryの実行からいきなり$colがでてきていますが、その間に例えば

php

1while ($col = mysql_fetch_assoc($result)) { 2 echo '<h3>'.$col['questionTitle'].'</h3>'; 3}

のように$colに値を取得するような処理はしていますか?

questionTitleに「クイズ1」と入ったレコードが2つあった場合、どちらか片方のquestionTitleを表示したいです。
$sql = "SELECT * FROM question WHERE question_id = 1";

からquestionTitleはプライマリーキーでもユニークでもない、question_idがプライマリーキーなのか?思いましたが、
どうですか?もしプライマリーキーであればプライマリーキーでwhere句で絞ったら1つしか結果はでてこないので重複はないとおもうのですがどうですか?

###追記
以下のような流れでどうですか?こちらににたようなテーブル作って実行すると一応動いてます。

$sql = "SELECT * FROM question WHERE question_id = 1"; $result = mysql_query($sql,$link); $question_count = 1; echo '<form action ="question.php" method="post">'; while($col = mysql_fetch_assoc($result)){ echo '<h3>'.$col['questionTitle'].'</h3>'; echo '<div align="center" class="question">'; echo $col['question']; for($i=1; $i<=count($col)-4; $i++) { print("<input type='radio' name='question{$question_count}' value={$i}>".$col['answer'.$i]); } echo '</div>'; $question_count++; } echo '</form>'; mysql_close($link);

投稿2016/11/24 02:05

編集2016/11/24 07:27
hiim

総合スコア1689

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

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

退会済みユーザー

退会済みユーザー

2016/11/24 04:48

whileで囲ってみましたが、そうしたら問題文がループされなくなってしまいました・・・
hiim

2016/11/24 04:58 編集

whileとは while($col = mysql_fetch_assoc($result)) の部分の事ですよね? SELECT * FROM question WHERE question_id = 1 というSQLはDBから複数行を返すSQLですか?(つまりquestion_id=1の行は複数ありますか?) もしquestion_idがプライマリキーであればこのwhileは1周しかしません。 少し現状情報追記できる情報があれば追記お願いします。 (特にDBの構造がどうなっているか)
退会済みユーザー

退会済みユーザー

2016/11/24 06:41

while($col = mysql_fetch_assoc($result))の部分です。 フィールドは、 question_id,question_title,no,question,answer1,answer2,answer3・・・(answer10まであります),format,other 問題id(問題種類)、問題タイトル、問題番号、項目1~10、input形式(radioとかcheckbox)、その他の項目 となっています。
hiim

2016/11/24 06:42

ここは重要な所なので確認ですが、question_idはプライマリーキーではないのですね?question_idが重複しているレコードは複数あるのですね?
退会済みユーザー

退会済みユーザー

2016/11/24 06:46

はい、プライマリーキーではありません。重複しているコードが複数存在してます。
退会済みユーザー

退会済みユーザー

2016/11/25 01:00

やってみましたが、 クイズ1 質問1 項目 クイズ1 質問2 項目 とタイトルが繰り返されてしまいます・・・ クイズ1 質問1 項目 質問2 項目・・・のように表示したいと思っております。
guest

0

$colはどっから出てきたのですか?
通常はmysql_queryの結果を、mysql_fetch_assocなどに渡してレコード処理をします。
マニュアル

補足1
mysql_queryは非推奨になったのでPDOを使うべきという意見が出ると思いますが、私は割愛します。
過去質問を参照してください。

補足2
phpMyAdminはデータベースではありません。
MySQLというデータベースを管理する、PHPで作成されたツールです。

投稿2016/11/24 01:59

ttyp03

総合スコア16998

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

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

0

ベストアンサー

最初の一回だけ表示するようにすればどうだろうか

php

1while($col = mysql_fetch_assoc($result)){ 2if($question_count ==1){ 3echo '<h3>'.$col['questionTitle'].'</h3>'; 4} 5$question_count++; 6}

投稿2016/11/25 01:05

date

総合スコア1820

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

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

退会済みユーザー

退会済みユーザー

2016/11/25 01:08

表示できました!ありがとうございました。
date

2016/11/25 01:14

mysqli か PDOにするのは今のうちにやってしまった方がいい。 後でやると変える部分が多くなって複雑になりかねないので
guest

0

selectのwhere条件で複数レコードマッチする場合に1レコード目のみ取得したいならlimit 1で1レコード目のみ取得すればいいのでは?

SQL

1$sql = "SELECT * FROM question WHERE question_id = 1 limit 1"; 2

# この対応が本来の要件に沿ったものかどうかはこの質問内容から判断できないので、質問に書かれている事に対してのみの回答です。

投稿2016/11/24 02:11

編集2016/11/24 02:18
Y.H.

総合スコア7914

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問