• ベストアンサー

select文の条件指定

PHPを使ってMySQLを検索するアプリを開発しています。 Select文の検索で以下のように検索条件を指定しています。 $query= "SELECT * FROM registration_tbl WHERE DATEDIFF(LAST_DAY(".$previousyear."),date) > 0 AND delete_flg = 0 ORDER BY date ASC ;" ; $res = $db->query($query); 上記の$query文字列の中の$previousyearには日付データが格納されています(確認済)。 意図としては$previousyearが示す月の月末日と、registration_tblのdateカラムとを比較して、dateの方が時期的に遅い(現時点に近い)レコードをselectしたいわけです。 なぜかこのクエリ文をMySQLに投げてもレコードがまったく検索できません。 もちろん該当するデータは10以上あることはphpMyAdminで確認すみです。そして、他の検索条件の場合にはちゃんと検索します。 よろしくお願いします。

質問者が選んだベストアンサー

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

なんか色々問題ある書き方ですが・・・ まず少しでもバグを減らしたいなら、以下注意を。 (1)*はつかわない (2)予約語をフィールドに使わない。たとえばdateとか (3)フィールド名はバックスラッシュ``で、値はシングルクォーテーション ''をつかってくくる (4)PHPの変数で値をわたすときはプリペアドステートメントで (5)クエリーのけつに;をつけない (6)デバグのためにdieでmysql_error()をひろう とにかく一度print $queryしてSQLが意図したとおり吐かれているか みてみてください

youzan1231
質問者

お礼

ありがとうございます。 select文を以下のように変更したところ、うまくいきました。 SELECT * FROM registration_tbl WHERE reg_date > LAST_DAY('".$previousyear."') AND delete_flg = 0 ORDER BY reg_date ASC 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#111181
noname#111181
回答No.2

PHP+MySQP歴8年のものです。 情報が不足しているので、以下の確認をお願いします。 1.PHPでクエリーを実行した際にエラーは返されていませんか? 2.変数 $previousyear とカラム date の型は同じですか? たとえば $previousyear='2010/3/18', date="2010/4/1' 3.値を比較した場合、$previousyear > date になっているレコードがあるのですか? 4.phpMyAdmin で同じクエリーを実行した結果はどうでしたか?

youzan1231
質問者

お礼

ありがとうございます。 select文を以下のように変更したところ、うまくいきました。 SELECT * FROM registration_tbl WHERE reg_date > LAST_DAY('".$previousyear."') AND delete_flg = 0 ORDER BY reg_date ASC 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • select文で見つからない場合の結果

    MEMBERLISTにUSERIDというフィールドがあるが、USERIDの値が00101であるレコードが存在しない場合、下記のようなコードでは$resにはTRUEが返されますか?それともFALSEですか? 指定した条件が見つからなかった場合、mysql_query関数がどっちを返すのか教えてください。 $sql = 'select USERID from MEMBERLIST where USERID = "00101"'; $res = mysql_query($sql, $conn);

  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • php5+mysqlのSELECT文でwhere句を指定すると正しく動

    php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • ある条件のSELECT文の作成について

    以下のSQLの作成で悩んでいます。 【内容】 抽出元テーブルの中で、あるコードが同じデータは、 ある項目を全て同じ値にして取得したい。 (例) ■抽出元テーブル コード SEQ FLG  1    1   1  1    2    1    3    2    1   0  2    2  2    3  3    1   1 コードは同じ物が1つ又は複数あります。 コードが同じ物にはSEQで番号が連番されます。 FLGの項目がありますが、SEQ=1のデータしか設定されていません。 ■求めたい結果 コード SEQ FLG  1    1   1  1    2   1    1    3   1  2    1   0  2    2   0  2    3   0  3    1   1 全てのデータでFLGを求めて取得します。 取得の仕方はコードが同じでSEQ=1の値を取ります。 抽出元テーブルと結果のデータ件数は同じになります。 抽出元テーブルと結果の違いは、FLGに値が埋まっているかどうかの違いのみです。 このテーブルのFLGはUPDATEする事は出来ません。 別表なども利用しないで、 selectのSQL文だけで対応したいです。 どのような方法で対応できるでしょうか? オラクルのバージョンは10gです。 よろしくお願い致します。

  • SELECT文での抽出条件

    以下のような処理を行いたいと思いますが SQL文の作成方法を御教授下さい。 【時間DB】 YEARMONDAY,HOUR,FLG, DATA ----------------------------- 20050528     1  1 10 20050528     2  1 20 20050528     3  1 30 20050528     4  1 40 . . . 20050528    22  1 40 20050528    23  1 50 20050528    24  1 60 【日DB】 YEARMONDAY,FLG, DATA ----------------------------- 20050528     1  250 処理内容:指定された日付で日DBの作成を行う。 抽出条件:フラグが全て等しい場合はその値を取得       :フラグが一致しない場合は0を取得 上記の場合,SQL文で抽出可能でしょうか? 以上,よろしくお願い致します。

  • 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
  • select文

    こんばんは。PHPでデータベースからレコードとフィールドを表として取り出そうとしてますが、うまく行きません。 MySQLへの接続はうまくいってると思うので、while文が間違ってるのでしょうか?PHPのバージョンはPHP Version 4.4.2です。 よろしくお願いしますm(__)m <?php require_once("dbini.php"); $con = mysql_connect($server, $user, $pass); $select = mysql_select_db($dbname, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $body = "<table border='0' cellpadding='5' cellspacing='5' width='500'><tr><td>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<b><font size='+2'>".$col["title"]."</font></b>" $body .= "</td></tr>"; $body .= "<tr><td colspan='2'>".$col["article"]."</td></tr></table>"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • 複合検索のselect文

    eclipseとmySQLで登録した情報を検索する機能を作っています。 図書館にあるようないくつかの条件を入力すると検索されるようなものを作りたいのですが、DAOのselect文をどう書けばいいかわかりません。 andでつなげるとnullが入ったときに機能しなくなりますし・・・ なにかヒントをいただけませんか?

  • SELECTでの指定行からの指定行数文の取得

    こんにちは。 OracleでSELECT文、一発で指定行から指定行数分のデータを取得するように指定できるのでしょうか? 例) SELECT * from tbl01; で、100行取得できる状態で25行目から30行分取得する OracleのSQLリファレンスを調べたのですが該当するようなものは 見当たりませんでした。 よろしくお願いします。