PHPによるMySQL select文の操作でのWHERE句の取り扱いについて

このQ&Aのポイント
  • $TNAMEテーブルから特定の条件で行を抽出するために、PHPでMySQLのSELECT文を使用する場合、WHERE句の取り扱いに注意が必要です。具体的には、parentが0であり、label1からlabel5までのフィールドが$SELECTEDLABELと一致し、かつnowdateが指定した範囲内である行を抽出する必要があります。しかしこの条件を正しく設定する方法が分からず、上手くいきません。
  • 問題は、WHERE句内の複数の条件を組み合わせる方法です。label1からlabel5までのフィールドに対してOR条件を設定し、その中で$SELECTEDLABELと一致する値を検索する必要があります。また、nowdateが指定された範囲内であることも条件に含める必要があります。
  • この問題の解決には、WHERE句の条件を正しく組み立てる必要があります。label1からlabel5までのフィールドに対してOR条件を設定し、その中で$SELECTEDLABELと一致する値を検索し、さらにnowdateが指定された範囲内であることも条件に含める必要があります。正しい条件を設定することで、目的の行を抽出することができます。
回答を見る
  • ベストアンサー

PHPによるMySQL select文の操作でのWHERE句の取り扱いについて

$sql = "select * from $TNAME where parent=0 and IF(label1=$SELECTEDLABEL or label2=$SELECTEDLABEL or label3=$SELECTEDLABEL or label4=$SELECTEDLABEL or label5=$SELECTEDLABEL) and nowdate between '$from_selectdate' and '$to_selectdate' order by nowdate"; parent=0でかつ label1からlabel5までのフィールドで その値が、$SELECTEDLABELであるものでかつ nowdateがbetween '$from_selectdate' and '$to_selectdate'であり order by nowdateであるもの という条件での抽出なのですが上手くいきません。 どうぞ宜しくお願い致します。

  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.2

http://php.s3.to/man/faq.databases.html#faq.databases.mysqlresource ここを参照してみてください(ページの一番下の6.を読んでみてください)。 これでデバッグできるのではないでしょうか。

sato777
質問者

お礼

正常にデバッグでき、原因は単純に mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); が追加したisset($***){文の前にあった事であると 解りました。 見慣れないエラーで難しく考えてしまったようです。 どうも有難う御座いました。 また一つ勉強になりました。

その他の回答 (1)

回答No.1

... IF(label1=$SELECTEDLABEL ... ↑ このIFをとればよいのではないでしょうか あとは、 $SELECTEDLABELが'(シングルクォート)でくくる必要の是非を解決してあげればうまく動くと思われます。

sato777
質問者

補足

当然それも試しましたが、下記の様なエラーが依然として表示されます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in どうぞ宜しくお願い致します。

関連するQ&A

  • 五十音順

    テーブルのフィールドに、読み仮名が入っています。 あ行、か行など、五十音順に抽出する場合のSQL文ですが、 $sql = 'select * from テーブル名 where kana between "あ" and "お" order by kana'; 上記の文を $sql = 'select * from テーブル名 where kana between "$key[$i]" order by kana'; という具合に配列などに入れたいと考えておりますが。 そのようなことは可能なのでしょうか? それとも、もっと効率よく五十音順の検索ができるようにする方法が ありますでしょうか?

  • どうしても、%$keyword%でひっかかると、そちらを食ってしまいます。

    $sql = "select * from $OP_TNAME where option_settingname_num='$session_option_settingname_num'"; if($optionname[1]!='' && $optionname[1]!='a' && $keyword!=''){ $sql .= " and field1 like '%$keyword%'"; } for($i=2;$i<=30;$i++){ if($optionname[$i]!='' && $optionname[$i]!='a' && $keyword!=''){ $sql .= " or field".$i." like '%$keyword%'"; } } $sql .= " order by nowdate"; 上記で、 where option_settingname_num='$session_option_settingname_num'を絶対条件にしたいのですが、うまくいきません。 どうしたらよいでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • postgre ⇒ mysql にした場合のSELECT文の作り方

    理由があって既存DBをpostgreからmysqlにすることになりました。 mysqlではto_charが使えないとのことで、DateFormatに差し替えてみましたが以下の部分が正常に動作しません。 どこがおかしいのかわかる方教えてください。 ■postgre $R = mysql_query("select *,to_char(ymd1,'YYYY/FMMM/FMDD') as ymd, to_char(ymd1,'HH24:MI') as time1, to_char(ymd2,'HH24:MI') as time2 from sch_table where ymd1 between '$b_ymd' and '$e_ymd' order by time1"); ■mysql $R = mysql_query("select DATE_FORMAT(date,'%Y/%c/%e') as ymd, DATE_FORMAT(ymd1,'%H:%i') as time1, DATE_FORMAT(ymd2,'%H:%i') as time2 from sch_table where ymd1 between '$b_ymd' and '$e_ymd' order by time1");

    • ベストアンサー
    • MySQL
  • MySQLでのWhere句

    MySQLでWhere句の書き方で苦戦しています。 以下のuser_table(オーダー)が来たときに、スタッフが用意すべき数量を商品ごとに抽出するSQLを書いています。 Where句の書き方が思いつきません。ご指導をお願いいたします。 user_table (name) (product) (user_volume) takada | pro_001 | 500 | takada | pro_002 | 100 | matuda | pro_003 | 400 | kawase | pro_001 | 200 | yosida | pro_001 | 500 | tanaka | pro_001 | 300 | tanaka | pro_002 | 500 | tanaka | pro_003 | 300 | 作りたいテーブル(SQLの結果) total_table (id)(product_name)(total_volume) staff | pro_001 | 1500 | staff | pro_002 | 600 | staff | pro_003 | 700 | 途中まで作って断念したSQL INSERT INTO total_table (id ,product_name,total_volume) SELECT 'staff',product,SUM(user_volume) FROM user_table WHERE ・・・;

    • ベストアンサー
    • MySQL
  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • sql文のwhere句について

    <環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?

  • 「SELECT ~  FROM テーブル名」の後に続く句は「WHERE句」と「ORDER BY句」以外にありますか?

    最近アクセスのSQL文を学びました。 選択クエリのSQL文で 「SELECT ~  FROM テーブル名」 の後に続く句は 「WHERE句」と 「ORDER BY句」以外にありますか? よろしくお願いします。

  • 特定条件でWHERE句の条件を変更したい

    @jouken int @sql varchar(MAX) @select varchar(MAX) @where varchar(MAX) set @select = 'select * from table1' set @where = ' where case when @jouken = 0 then 'field1 = 1' when @jouken = 1 then 'field1 = 1 or field2 = 1' when @jouken = 2 then 'field1 = 1 or field2 = 1 or field3 = 1' end ' set @sql=@select+@where exec(@sql) 上記のような文字列の組み合わせでの作成でやりたいことはできたのですが、 こちらを直接SQLの中でやりたいのです。 以下の文は機能しません。 select * from table1 where case when @jouken = 0 then field1 = 1 when @jouken = 1 then field1 = 1 or field2 = 1 when @jouken = 2 then field1 = 1 or field2 = 1 or field3 = 1 end ご教授の程、よろしくお願い致します

  • 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文でこんなことはできるでしょうか?

    例えば、日付別の売上のリストを作る場合に SELECT date,SUM(kingaku) AS goukei FROM uriage WHERE date BETWEEN '2007/01/01' AND '2007/01/31' GROUP BY date ORDER BY date を発行して, date goukei 2007/01/01 10000 2007/01/03 20000 2007/01/04 30000 2007/01/06 20000 2007/01/07 40000 2007/01/08 50000 ・・・ を取得したとして、 これを date goukei 2007/01/01 10000 2007/01/02 0 2007/01/03 20000 2007/01/04 30000 2007/01/05 0 2007/01/06 20000 2007/01/07 40000 2007/01/08 50000 ・・・ というように、データが1件もない日付も 間にはさむ方法はあるでしょうか? 以上、よろしくお願いします。