PDO MYSQL CASE

gLaVoReZa

Registered
Здравейте,

Интересува ме защо това не бачка:

PHP:
$statement = $connection->prepare('SELECT `name`,`surname`, CASE WHEN `points` IS NULL THEN 0 END CASE FROM `members` WHERE `id` = :id');
$statement->bindParam(':id', $_SESSION['id'], PDO::PARAM_INT);
$statement->execute();

Проблемът е в CASE. Както и да го въртя, все не работи с него, а като го махна, започва да работи.
 
PHP:
$statement = $connection->prepare('SELECT `name`,`surname`, CASE `pts` WHEN `points` IS NULL THEN 0 END CASE FROM `members` WHERE `id` = :id');
$statement->bindParam(':id', $_SESSION['id'], PDO::PARAM_INT);
$statement->execute();
 
Проблема ти е в заявката

[sql]
SELECT name, surname, CASE points WHEN (points IS NULL) THEN '0' END AS points_value FROM `members` WHERE id = :id
[/sql]
Това е само пример и не съм сигурен дали ще работи както ти искаш, но ако има проблем пиши , се ше го решим :)
 
Пробвай нещо такова, макар и да е безмислено да ползваш CASE в случая
[sql]
...CASE points WHEN IS NULL THEN 0 ELSE points END AS points_value ...[/sql]
и ако това е единственото ти условие, помисли дали ти е нужен CASE, а не обикновен IF примерно
 
Не използвайте CASE само за един случай. Специално за този случай има два по-удачни варианта:

COALESCE(points,0)
IFNULL(points,0)

Първата функция връща първия срещнат резултат, който е различен от NULL, а втората прави проверка за първия израз дали е NULL и ако е - връща втория. С други думи така оформени двете функции ще работят по идентичн начин.
 

Back
Горе