• 締切済み

MysqlとPHPで5年前のものを絞込する方法

MysqlのDATA型 sqlDATAがあります。 sqlDATAを基準に10年以内、20年以内、30年以内、というように絞り込みたいです。 $date1 = '2011-10-16'; $date2 = date('Y-m-d'); list($Y1,$M1,$D1) = sscanf($date1,'%d-%d-%d'); list($Y2,$M2,$D2) = sscanf($date2,'%d-%d-%d'); $Y3 = $Y1-($Y2-$Y1); $date3 = "{$Y3}-{$M1}-{$D1}"; $s = 'SELECT * FROM table WHERE sqlDATA<'.$date2.' sqlDATA>='.$date3; こういうやり方でよいのでしょうか。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • ponta1971
  • ベストアンサー率30% (361/1191)
回答No.2

$data2は今日の日付ですよね。 $data1はなんの日付でしょうか? >MysqlのDATA型 sqlDATAがあります。 sqlDATAを基準に10年以内、20年以内、30年以内、というように絞り込みたいです。 テーブルに保存されているデータの中から任意のデータを選択し、選択したデータに格納されている日付がsqlDATAということかと思ったのですがあっているでしょうか? sqlDATAを基準にするということは、sqlDATAは任意の一つのデータとなると思います。 書かれているソースの$date1がsqlDATAを表しているのかと思ったのですが、それ以下のソースを見る限り、そういうわけでもなさそうですし・・・。 >$Y3 = $Y1-($Y2-$Y1); この式だと、$date1が1年前なら$Y3には2年前、$date1が5年前なら$Y3には10年前といった日付が入ることになると思います。 10年以内、20年以内、30年以内といった絞込み条件にはならないかと。 ここから、こういったことがしたいのかなと予想してです。 テーブルの中のsqlDATAに日付が格納されているとして 今日の日付から10年以内のデータを抽出する場合。 $s = 'SELECT * FROM table WHERE sqlDATA<='.date('Y-m-d').'AND sqlDATA>='.date('Y')-10.'-'.date('m-d'); 任意の指定したデータの日付$date1から10年以内のデータを抽出する場合。 $date1 = '2011-10-16'; list($Y1,$M1,$D1) = sscanf($date1,'%d-%d-%d'); $date = ($Y1-10).'-'.$M1.'-'$D1; $s = 'SELECT * FROM table WHERE sqlDATA<='.$date1.'AND sqlDATA>='.$date;

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

date1 = '2011-10-16'; $s = 'SELECT * FROM table WHERE sqlDATA BETWEEN (@d:="'.$date1.'") - INTERVAL 10 YEAR AND @d - INTERVAL 1 DAY'; みたいな感じでよいのでは?

関連するQ&A

  • PHP+MySQLで

    PHPとMySQLにて、 データベースのテーブル[買い物]に、 「野菜」「日時」という属性を用意しておき、そこに (にんじん)(2006-10-31 09:00) (かぼちゃ)(2006-11-01 10:21) (たまねぎ)(2006-10-21 11:45) (もやし)(2006-12-22 14:00) が格納してあります。 ここから日付が、例えば、2006年の10月の行を抜き出すにはどうしたらよいのでしょうか? $y=$_GET['year'] $m=$_GET['month'] $d=$_GET['day'] として、年月日を得ます。 $y年の$m月分のデータを取得したいのですが、よく分かりません。 select * from 買い物 where 日時>$y-$m-1 and 日時<$y-$m-31 のような感じになるのでしょうか? どなたかよろしくお願いします。 MySQL4.4.4です。

    • ベストアンサー
    • PHP
  • mysqlコマンドとPHPで同じSQLの結果が違う

    MySQL 5.5で、mysqlコマンドからSQLを流したときと、PHPから同じSQLを発行したときで結果が違うのです。 どうも日付のパースが関係しているようで、「2014-08-19」と書くとどちらも同じ結果になるのに、 「2014-8-19」と書くとPHPでは1行も返ってこなくなります。 再現例: ================== CREATE TABLE t (day date NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO t (day) VALUES ('2014-08-19'); SELECT * FROM t WHERE day = '2014-8-19'; +------------+ | day | +------------+ | 2014-08-19 | +------------+ 1 row in set (0.00 sec) ↑同じSELECTをPHPから発行すると1行も返ってこない。 ================== mysqldとmysqlは5.5.30。 phpinfo()のmysqlのセクションでは Client API version 5.5.30 と出ています。 show variablesで見るとdate_formatはどちらも%Y-%m-%dになっています。 他にどこを確認すればいいでしょうか?

  • MySQL + PHP 同じテーブル内でのクエリについて

    PHP+MySQL勉強中の初心者です。 PHP+MySQL環境でのクエリについて、以下の条件でのクエリ結果を求めたいのですが、上手くできませんので、質問させてください。 MySQLのテーブルは以下のようになっています。 date        no   name ---------------------------- 2009-12-10   15   takada 2009-12-15   10   hirooka 2009-12-18   13   wakada 2010-01-10   15   takada 2010-01-11   13   wakada ----------------------------- 出力させたいクエリは、前月データを元にno列をKEYとした重複チェックです。 前月データを全件出力し、当月データに同じnoがあった場合、当月日付を 表示させたいと思っています。 (PHPで希望する出力結果) date       no   name     date2 ---------------------------------------- 2009-12-10  15   takada   2010-01-10 2009-12-15  10   hirooka 2009-12-18  13   wakada   2010-01-11 ----------------------------------------- 以下のようなソースでは、1行のみの出力結果しか表示されず、 whileの使い方に問題があると思うのですが、どのように解決すれば良いのかが解りません。 どうか、解決策をよろしくお願いいたします。 $mysql->query("SELECT * FROM xxxx where date LIKE '$y-$m%'"); while($row = $mysql->fetch()){ $date = $row["date"]; $no = $row["no"]; $name = $row["name"]; $mysql->query("SELECT * FROM xxxx where upddate LIKE '$y2-$m2%' and no = '$no'"); while($row = $mysql->fetch()){ $date2 = $row["date"]; echo <<<EOT <td>$date</td> <td>$no</td> <td>$name</td> <td>$date2</td><tr> EOT; } }

    • 締切済み
    • PHP
  • phpで「<」を作りmysqlで使いたい

    $mmm = mysql_connect('localhost','root','pass'); mysql_select_db('database',$mmm) $rrr = array(100,200); $fieldname = "dataA"; $qqq = "SELECT * FROM ttt WHERE 1"; $sss.=" AND ".$rrr[0]."<=".$fieldname." AND ".$fieldname."<".$rrr[1]; echo $sss; 表示されるのは、 SELECT * FROM ttt WHERE 1 AND 100 です。<以降を取得できません。原因は何でしょうか。

    • 締切済み
    • PHP
  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP+MySQLで高速化

    mysql_query()が返したresourceの行数は得られませんか? 例をあげると データが id p (フィールド) 42 651 23 357 67 123 28 385 このように4レコード有ったとして $res = mysql_query('select p from tbl where p="123"'); これで、$resから3行目というのを得て、3を使ってidの67を得たいのですが、 $res = mysql_query('select id,p from tbl where p="123"'); のようにして$resのidを見るようにする以外の方法は無理なんでしょうか? もし前者が可能ならそちらの方が速いと思うのですが。

    • ベストアンサー
    • PHP
  • PHP+MySQL

    PHP4で、MySQLに接続しています。 $connには、接続IDが格納されています。 以下のスクリプトで、「エラー」が出てしまうのですが、何故でしょうか? $sql = "SELECT (User_num, User_name, User_pass) FROM User WHERE User_name='$login_name'"; if (!$result= mysql_query($sql, $conn)){ die (print ("エラー")); } SQL文を、 SELECT (User_num) FROM User WHERE User_name='$login_name' と書き換えるとうまくいきます。複数にするとエラーというのはどうしてでしょう

    • ベストアンサー
    • MySQL
  • 該当レコードなしでエラーを発生させない方法

    レコードなし、もしくは該当レコードなしでエラーを発生させない方法を教えてください データベース初心者です レコードなしもしくは該当レコードなしの状態で検索を行うとエラーが発生します。 エラーを発生させずに検索を行う方法があれば教えてください。 MySQL 5.0.67 レコードは下記のようになります。 desc table; +----------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+-------+ | val1 | smallint(6) | NO | PRI | 0 | | | val2 | smallint(6) | NO | PRI | 0 | | | val3 | smallint(6) | NO | PRI | 0 | | | date_y | char(4) | NO | PRI | | | | date_m | char(2) | NO | PRI | | | | pre | bigint(19) | NO | | 0 | | | now | bigint(19) | NO | | 0 | | +----------+----------------------+------+-----+---------+-------+ 下記のSQL文で検索を行いました。 SELECT t.date_y, t.date_m FROM table t, ( SELECT date_y,max(date_m*1) as date_m FROM table WHERE date_y= ( SELECT max(date_y*1) as date_y FROM table WHERE (now - pre) > 0 ) ) s WHERE t.date_y=s.date_y and t.date_m=s.date_m; レコードなし、もしくは該当レコードがないとWHERE文のdata_yにnullが代入され、 本SQL文でエラーが発生します。 いろいろ調べて「EXISTS」「NOT EXISTS」「NULLIF」を利用するのかな? と思ったのだけど、下記URLを参照しても、うまくSQL文が書けませんでしたので、ご教授頂ければ幸いです。 6.4.2.6. EXISTS と NOT EXISTS http://dev.mysql.com/doc/refman/4.1/ja/exists-and-not-exists-subque... 6.3.1.4. フロー制御関数 http://dev.mysql.com/doc/refman/4.1/ja/control-flow-functions.html

    • ベストアンサー
    • MySQL
  • MySQL + PHP での自動採番

    関連する本を買い込みましたが、全然情報がないのでご助言下さい! 複数テーブルから文字列を抽出してIDを振るような入力フォームを作っています。 具体的には以下のような形を考えているのですが、どのように記述をしてよいのかさっぱりです・・・。 table1: +-----+-------------+------+------+-- | ID0 | ID1 | col1 | col2 | +-----+-------------+------+------+-- | 1 | KW0807-0001 | A | 3323 | | 2 | KX0807-0002 | B | 1122 | | 3 | KY0807-0003 | C | 4441 | | 4 | KW0807-0004 | A | 1256 | +-------------------+------+------+-- table2: +-----+------+------+-- | ID2 | col3 | col4 | +-----+------+------+-- | 1 | A | W | | 2 | B | X | | 3 | C | Y | | 4 | D | Z | +-----+------+------+-- ・ID0 は AUTO INCREMENT ・ID1 -> [K(規定値)] + [col1で入力する値よりcol4を抽出] + 入力した年 (08) + 入力した月 (07) + 0001 から始まる4桁の連番 ・col1, col2の入力と同時に、ID1 を自動で生成、入力 (table2は既存です) ひとまずこんな感じかな・・・と書いてみましたが、全然ダメです。 ID1の入力値は「KResource id #30807-」となってしまいました。 $y = date("y",time()); $m = date("m",time()); $renban = mysql_query(" select col4 from table1 INNER JOIN table2 //LEFT JOINでも可? ON col1.table1 = col3.table2 where '$col1' = col3 "); $ID1 = "K$renban$y$m-0000"; $sql = "insert into table1 values('$ID1', '$col1' '$col2'); ※4桁の連番もどうしてよいか分からないので、ひとまず「0000」としました。 何が足りないのか誤ってるのか・・・ご教授いただければ幸いです。

専門家に質問してみよう