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

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

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

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

PHP

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

Q&A

解決済

2回答

3796閲覧

mysqlでSELECT後の配列に該当するユーザーで絞り込みを実行したい

kphex

総合スコア42

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/06/12 06:39

###前提・実現したいこと
アポイントテーブル、スタッフテーブルが以下の様にあり、カレンダーに表示するアプリケーションを想定します。

mysql

1CREATE TABLE `appoint` ( 2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 3 `title` text, 4 `staff_id` int(10) unsigned NOT NULL, 5 `start_time` datetime DEFAULT NULL, 6 `end_time` datetime DEFAULT NULL, 7 PRIMARY KEY (`id`) 8) ENGINE=MyISAM DEFAULT CHARSET=utf8; 9 10CREATE TABLE `staff` ( 11 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 12 `name` varchar(255), 13 `reg_date` datetime DEFAULT NULL, 14 `upd_date` datetime DEFAULT NULL, 15 PRIMARY KEY (`id`) 16) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以下のコードで全アポイントを取得します。

<?php $sql = "SELECT a.id, a.title, s.name, s.id "; $sql .= "FROM appoint a "; $sql .= "LEFT JOIN staff s ON a.staff_id = s.id "; $rs = mysqli_query($sql); while ($item = @mysqli_fetch_array($rs)); ?>

ここで全アポイントをjQueryのFullCalendarを使用して表示させるのですが、要望としてアポイントを取得したスタッフをセレクトボックスに表示させて、セレクトボックスでスタッフを選択するとそのスタッフが取得したアポイントのみ表示させるという事を実現させたいと考えています。

###発生している問題・試した事
この時、スタッフ名、スタッフidは全てのアポイントに対して取得できるのですが、同じ名前とidは省略する事ができず格闘しております。

###補足情報
mysql 5.7
php 5.6

かなり初歩的な質問で申し訳ございませんが、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

いったん、スタッフidをキーとする配列を作ってやれば良いと思います。
そうすれば、データの重複は自動的に除かれるからです。

Before

php

1$rs = mysqli_query($sql); 2while ($item = @mysqli_fetch_array($rs));
After

php

1$rs = mysqli_query($sql); 2 3$items = array(); 4$staffs = array(); // スタッフの一覧を表す配列。各要素は「スタッフid => スタッフ名」 形式 5while ($item = @mysqli_fetch_array($rs)) { 6 $items[] = $item; 7 $staffs[$item[3]] = $item[2]; 8} 9 10foreach ($items as $item); // while ($item = @mysqli_fetch_array($rs)); と同じ

投稿2017/06/12 08:54

KiyoshiMotoki

総合スコア4791

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

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

kphex

2017/06/13 06:05

有難うございました。$staffsからスタッフ別のセレクトボックスを作成する事が無事にできました。
guest

0

セレクトボックスでスタッフを選択する

これはmultipleかどうかで多少処理が違います。
基本的にはスタッフテーブルからセレクトボックスをつくって
検索はアポイントテーブルだけで十分です
start_timeとend_timeが日付をまたがないのであれば
どちらか一つをつかえばいいでしょう。

staff_id=? AND date_format(start_time,'%Y-%m-%d')=?

投稿2017/06/12 07:15

yambejp

総合スコア114583

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

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

kphex

2017/06/13 06:06

今回は処理を分けずに一度にすっきりとできましたが、本来であれば頂きました様に別々に行う事がバグも少なく良さそうですね。有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問