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

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

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

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

phpMyAdmin

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

PHP

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

データベース

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

Q&A

解決済

1回答

1535閲覧

データベースから特定のレコードを取るための方法を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

phpMyAdmin

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

PHP

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

データベース

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

0グッド

0クリップ

投稿2019/01/09 02:48

前回質問
上記質問の内容の続きとなりますが、質問内容の変更に伴い新たに質問させていただきます。

phpで勤怠管理のようなものを作成しており、
下記コードにあるよう、
①a_m.phpのフォームでNoを入力後、出勤/退勤/休憩開始/休憩終了をラジオボタンにて選択
②a_ma.phpでデータベースにインサートしております。

質問内容は、
保存されたデータベースの中からNoごとの該当の日付の「出勤時間」「退勤時間」を
取り出したい
です。
困っていることは、
現状では一つのNoに複数日の出勤/退勤があるため[該当の日付の「出勤時間」「退勤時間」を
取り出すこと]ができません。

お教えいただきたい内容は、
下記コードで上記質問内容を実行するにはどのようなコードを書けばいいか?
また、コードやデータベースをどのように変更すればより簡単に(簡潔に)実行できるか、です。

前回質問時に多くの方にご回答いただいている中、大変恐縮ですがいただいたご説明で理解ができなかったため
再度質問をさせていただきました。

何卒、宜しくお願い致します。

<DOCTYPE html> <html lang ="ja"> <head> <meta charset="UTF-8"> <title>勤怠管理</title> </head> <body> <h1><u>勤怠管理</u></h1> <div class="aaa"> <?php $week = ['日','月','火','水','木','金','土']; $weekday = date('w'); $now3 =$week[$weekday]; $now1 =date('Y-m-d'. '(' . $now3 .')'); $now2 =date('H:i'); print '<table border="5" class="a">'; print '<tr>'; print '<th>'; print '<span style="font-size:300%;">'. $now1 .'</span><br>'; print '<span style="font-size:300%;">'. $now2 .'</span><br>'; print '</th>'; print '</tr>'; print '</table>'; ?> </div> <div class="bbb"> <form action="a_ma.php" method="POST"> <b>No.</b> <input type="text" name="No" placeholder="スタッフNo.を入力"><br> <span style="font-size: 14px;"><u>下記を選択し、登録ボタンをクリックしてください。</u></span><br> <input type="radio" name="office" value="出勤">出勤<br> <input type="radio" name="office" value="退勤">退勤<br> <input type="radio" name="office" value="休憩開始">休憩開始<br> <input type="radio" name="office" value="休憩終了">休憩終了<br> <input type="submit" value="登録">&nbsp;&nbsp;<input type="reset"> </form> </div> </body> </html>
<DOCTYPE html> <html lang ="ja"> <head> <meta charset="UTF-8"> <title>勤怠管理 登録完了</title> </head> <body> <h1><登録完了></h1> <?php $week = ['日','月','火','水','木','金','土']; $weekday = date('w'); $now3 =$week[$weekday]; $now1 =date('Y-m-d'. '(' . $now3 .')'); $now2 =date('H:i'); if(isset($_POST['No'])){ $No = $_POST['No']; $office = $_POST['office']; try{ $pdo = new PDO("mysql:host=localhost;dbname=part_time_job;charset=utf8;","root",""); $pdo ->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql = "INSERT INTO ptj(No, office, ymd, time, week) VALUES (:No, :office, :ymd, :time, :week)"; $stmt = $pdo->prepare($sql); $stmt ->bindparam(':No',$No,PDO::PARAM_STR); $stmt ->bindparam(':office',$office,PDO::PARAM_STR); $stmt ->bindparam(':ymd',$now1,PDO::PARAM_STR); $stmt ->bindparam(':time',$now2,PDO::PARAM_STR); $stmt ->bindparam(':week',$now3,PDO::PARAM_STR); $stmt ->execute(); $id = $pdo->lastinsertid(); }catch (PDOException $e){ print "データベースエラー"; var_dump($e->getMessage()); throw $e; }catch (PDOException $e){ //UTF8に文字エンコーディングを変換 print mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'); } $pdo = null; } ?> <br><br> <div class="table"> <h1>登録が完了しました。</h1> <br><a href="http://localhost/ptj/a_m.php">【勤怠ページ】へ戻る</a> </div> </body> </html>

データベースの構造です
データベース構造

-- phpMyAdmin SQL Dump -- version 4.8.3 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Generation Time: -- サーバのバージョン: 10.1.35-MariaDB -- PHP Version: 7.2.9 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `part_time_job` -- -- -------------------------------------------------------- -- -- テーブルの構造 `ptj` -- CREATE TABLE `ptj` ( `num` int(11) NOT NULL, `No` int(4) NOT NULL, `office` varchar(10) NOT NULL, `ymd` varchar(10) NOT NULL, `time` varchar(10) NOT NULL, `week` varchar(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- テーブルのデータのダンプ `ptj` -- INSERT INTO `ptj` (`num`, `No`, `office`, `ymd`, `time`, `week`) VALUES (20, 9998, '出勤', '2018-12-26', '12:48', '水'), (21, 9999, '出勤', '2018-12-26', '12:48', '水'), (23, 9998, '退勤', '2018-12-26', '16:04', '水'), (28, 9999, '退勤', '2018-12-26', '18:21', '水'), (36, 1, '出勤', '2018-12-28', '11:42', '金'), (37, 1, '退勤', '2018-12-28', '16:24', '金'); -- -- Indexes for dumped tables -- -- -- Indexes for table `ptj` -- ALTER TABLE `ptj` ADD PRIMARY KEY (`num`); -- -- AUTO_INCREMENT for dumped tables --

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

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

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

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

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

kunai

2019/01/09 02:57

ココはコードを開発して提供してくれる場ではありませんので、ご自分で書かれたSELECT文や、そのクエリ発行部分のソースコードをご提示ください。 その上で、想定通りに動かないのであれば何が悪いかを考え、どうしてもわからない場合に改めて質問してください。
yambejp

2019/01/09 02:58

前回のベストアンサーを取り消して、続きでかけばいいと思いますよ 質問に今回の内容を追記すればいいだけのこと。 ちなみに前回回答したとおり、日時はまとめてdatetimeでもって 退勤は出勤の子供として親子関係をもつとよいでしょう。 そうではないなら出勤と退勤を1レコードで管理して下さい できればこの質問はクローズしたほうがよいでしょう。
azuapricot

2019/01/09 03:02

前回の質問を読む限り、質問内容が2つあるような・・・ ・データベースの構造について悩んでいる ・PHPの書き方がわからない 全部まとめて解決しようとしても無理なので、別々に分けて質問してみるのもよいかもしれません。 具体的に何がわかっていて、何が分からないのか、正直こちらもよくわかりません・・・
退会済みユーザー

退会済みユーザー

2019/01/09 06:40

kunai様 かしこまりました。ご指摘ありがとうございます。 今後気を付けてまいります。
退会済みユーザー

退会済みユーザー

2019/01/09 06:42

yambejp様 前回質問時は私の理解力が足らず、失礼いたしました。 本質問に関してはご回答も頂いてますのでご回答者様をベストアンサーにして解決済みにて締めさせていただきます。 ありがとうございました。 なお、時間の取得自体はできましたので、出勤・退勤ともに取得することができましたら改めてご報告させていただきます。
退会済みユーザー

退会済みユーザー

2019/01/09 06:43

azuapricot様 ご指摘ありがとうございます。 質問の仕方も勉強してまいります。
guest

回答1

0

ベストアンサー

下記コードで上記質問内容を実行するにはどのようなコードを書けばいいか?

SELECT * FROM ptj WHERE No = ? AND ymd = ?

また、コードやデータベースをどのように変更すればより簡単に(簡潔に)実行できるか、です。

CREATE TABLE ptj (
seq INT NOT NULL AUTO_INCREMENT,
No INT NOT NULL DEFAULT '0',
Office VARCHAR(10) NOT NULL DEFAULT '0',
WorkDate DATE NOT NULL DEFAULT '0',
In DATETIME NOT NULL DEFAULT '0',
Out DATETIME NOT NULL DEFAULT '0',
RestOut DATETIME NOT NULL DEFAULT '0',
RestIn DATETIME NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

投稿2019/01/09 03:04

編集2019/01/09 03:05
papinianus

総合スコア12705

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

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

退会済みユーザー

退会済みユーザー

2019/01/09 06:39

papinianus様 ご回答ありがとうございます。 SELECT * FROM ptj WHERE No = ? AND ymd = ? で取得できました。 出勤・退勤それぞれの取得などまだ課題はありますがお教えいただいたコードをもとにやってみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問