プロが教えるわが家の防犯対策術!

MySQLのクエリの書き方に関しての質問です。
下記のように、SELECT句より、サブクエリで得た値をASに置き換え、その値をWHERE句の2箇所で使いたいのですが、そのまま使ったら、SQLSTATE[42S22]: Column not found: 1054 Unknown column 't_count' in 'where clause'のようにカラムが見つからないといわれました。やはり、WHERE句でも、同じようにサブクエリで取得しないとだめなのでしょうか? ただ、一度SELECT句で取得しているので、効率が悪いので、なんとかしたいのですが、よい方法はありますでしょうか?

$sql = sprintf('SELECT %1$s.ID, '
. '(SELECT count(%2$s.test_id) FROM %2$s WHERE %1$s.test_id = %2$s.test_id)AS t_count '
. 'FROM %1$s '
. 'WHERE 40 <= t_count OR 40 <= t_count', $this->test1, $this->test2);

$stmt = $this->db->query($sql);
$data = $stmt->fetchAll();

A 回答 (1件)

phpの処理が入っていると再現性が確認できないので


とりあえずピュアなSQL文で書き直してしつもんしてください
すくなくともSELECT句の別名をwhere句でつかうのはNGです
順番的にはwhere句で絞ってからselectで結果を抽出するわけですから。

場合によってはhavingで処理するか
もしくはすなおにサブクエリをつかってください
    • good
    • 1
この回答へのお礼

ありがとうございます。素直に、selectで処理しました。

お礼日時:2017/11/13 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!