можно как нибудь вместо одинаковых подзапросов в BETWEEN там как нибудь накатать 1 подзапрос и одной переменной все это сравнивать или и так сойдет?
$query = "SELECT *
FROM " . $this->v_test . "
WHERE plid = ?
AND
CASE WHEN
(SELECT COUNT(*) FROM " . $this->v_test . " WHERE plid = ?) > 50
THEN
date BETWEEN
STR_TO_DATE(DATE_SUB((SELECT date FROM " . $this->v_test . " WHERE plid = ? ORDER BY date DESC LIMIT 1), INTERVAL 1 MONTH), '%Y-%m-%d')
AND
STR_TO_DATE(DATE_ADD((SELECT date FROM " . $this->v_test . " WHERE plid = ? ORDER BY date DESC LIMIT 1), INTERVAL 1 DAY), '%Y-%m-%d')
ELSE TRUE END
ORDER BY pid DESC";
$stmt = $this->conn->prepare( $query );
$stmt->bindParam(1, $this->key);
$stmt->bindParam(2, $this->key);
$stmt->bindParam(3, $this->key);
$stmt->bindParam(4, $this->key);
$stmt->execute();
return $stmt;
Типа там че то как то так надо но это не точно
@date = (SELECT date FROM " . $this->v_test . " WHERE plid = ? ORDER BY date DESC LIMIT 1);
date BETWEEN
STR_TO_DATE(DATE_SUB(@date, INTERVAL 1 MONTH), '%Y-%m-%d')
AND
STR_TO_DATE(DATE_ADD(@date, INTERVAL 1 DAY), '%Y-%m-%d')