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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

5回答

1439閲覧

データベースからの条件検索について

rinrin1137

総合スコア87

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

2クリップ

投稿2019/10/17 05:41

PHPとSQLiteにて条件にヒットする日付のデータを抽出したいと考えております。

PHP

1 <?php 2 if(!empty($search)){ 3 $posts = $dsn->query("SELECT * FROM report WHERE date LIKE '%$search%' ORDER BY id DESC"); 4 $post = $posts->fetchAll(); 5 }else{ 6 $posts = $dsn->query("SELECT * FROM report ORDER BY id DESC LIMIT 61"); 7 $post = $posts->fetchAll(); 8 } 9 ?>

データベースの中身

SQLite

1id date 2-------- ---------------- 34 2019/01/02 43 2019/01/01 52 2018/12/25 61 2018/12/24

現在の状態ですと、検索画面で「2019/01」と入力すれば、2019/01に該当する全件表示は可能なのですが、
前月の26日から当月の25日までの分を表示する方法はありますでしょうか?

上記の例では2018/12/26~2019/01/25までの全件表示をしたいと考えております。

日報のシステムを作成していますが、毎月25締めの26日開始なのでややこしくなっております。

なお、条件がない、もしくは初期状態では61日分の表示としております。

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

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

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

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

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

guest

回答5

0

ベストアンサー

sql

1SELECT * FROM report 2WHERE date BETWEEN '2018/12/26' AND '2019/01/25' 3ORDER BY id DESC

投稿2019/10/17 05:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rinrin1137

2019/10/17 05:57

前回に引き続き、ご回答いただき誠にありがとうございます。 頂いたSQL分で出来そうです!条件1~条件2で検索するにはinputをそれぞれ用意しないといけませんよね? m(_ _)m
退会済みユーザー

退会済みユーザー

2019/10/17 05:59

inputは一つだけでもいいと思いますけど。 end = start + 1ヶ月 - 1日で計算できますから。
rinrin1137

2019/10/17 07:10

>end = start + 1ヶ月 - 1日で計算できますから。 こちらはどこに記述すればよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2019/10/17 07:11

どこにと言うのは? 普通にPHPに記述すればいいんじゃないですかね。
rinrin1137

2019/10/17 08:00

ありがとうございます。無事に思ったどおりの表示ができました。 またBETWEENとLIKEの併用はできないことも勉強になりました。
退会済みユーザー

退会済みユーザー

2019/10/17 08:05

> BETWEENとLIKEの併用はできないことも勉強になりました。 できますよ。
rinrin1137

2019/10/17 08:13

SELECT * FROM report WHERE date BETWEEN '%search01%' AND '%search02%' ORDER BY id DESC LIKE '%search01%' AND '%search02%' のような形でしょうか?
退会済みユーザー

退会済みユーザー

2019/10/17 08:16

あー、なるほどね。それはダメですわ。 あくまで併用できるのはちゃんと文法にしたがって書くことが前提です。
rinrin1137

2019/10/17 08:30

検索をしてみたのですが、ORを使うことは理解できましたがいまいち文法がどうかくのか理解できませんでした・・・。
退会済みユーザー

退会済みユーザー

2019/10/17 08:34

like を使って何を検索したいのですか?
rinrin1137

2019/10/17 08:42

入れ違いで申し訳ございません。 SELECT * FROM report WHERE date BETWEEN '$search01' AND '$search02' OR date LIKE '%$search01%' ORDER BY id DESC 上記のコードで解決いたしました。この度は誠にありがとうございました。
guest

0

前月の26日から当月の25日までの分を表示する方法はありますでしょうか?

辞書式に文字列比較で済ませられそうな気もします。

sql

1WHERE `date` BETWEEN '2018/12/26' AND '2019/01/25'

投稿2019/10/17 05:51

maisumakun

総合スコア145183

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

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

rinrin1137

2019/10/17 08:01

ご回答頂きありがとうございます。 無事に解決できました!
guest

0

期間検索はBETWEENを利用してください

なお、おそらくfrom/toの日付はPHP側で作った方が楽に思います

投稿2019/10/17 05:49

編集2019/10/17 05:51
m.ts10806

総合スコア80850

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

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

rinrin1137

2019/10/17 08:01

ご回答頂きありがとうございます。 無事に解決できました!
guest

0

SQL

1where date betwenn '2018/12/26' and '2019/01/25'

上記になるような変数を利用した編集は、以下の様になるのではないかと思います。

SQL

1where date betwenn strftime('%y/%m/%d', datetime('$search/26', '-1 months')) and '$search/25'

投稿2019/10/17 05:57

sazi

総合スコア25186

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

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

0

SELECT * FROM report WHERE date BETWEEN '$search01' AND '$search02' OR date LIKE '%$search01%' ORDER BY id DESC

$search01~$search02の範囲もしくは、$search01のあいまい検索は、

上記のコードで無事に解決することができました!

回答してくださいました皆様ありがとうございました。

投稿2019/10/17 08:45

rinrin1137

総合スコア87

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

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

sazi

2019/10/17 08:54

どちらかの条件しかあり得ないのでしたら、orにするのではなく、SQLを別々に用意して、条件で切り替えるようにした方が、パフォーマンスは良くなりますよ。
rinrin1137

2019/10/17 08:55

ありがとうございます。 参考にしてパフォーマンスも意識しつつコードを書いてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問