COUNT() ou EXISTS() ? Demande de conseil
Bonjour,
Je cherche à déterminer si une ligne existe ou non dans une table (pas besoin de connaître le nombre de fois ou elle existe, pas besoin non plus d'en récupérer les données).
J’obtiens le résultat attendu de deux manières. Laquelle me conseillez-vous? Ou y-a-t-il mieux à faire?
Option COUNT():
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
$reqCount = <<<SQL
SELECT COUNT(*)
FROM table
WHERE table.colonne1 = ?
AND table.colonne2 = ?;
SQL;
try{
$stmtCount = $db->prepare($reqCount) ;
$stmtCount -> bindParam (1, $col1,PDO::PARAM_STR);
$stmtCount -> bindParam (2, $col2,PDO::PARAM_STR);
$stmtCount -> execute()
$resCount = $stmtCount -> fetch();
if (intval($resCount["COUNT(*)"])==0){
// nexiste pas traitement;
}
else{
// existe traitement;
} |
Option EXISTS()
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$reqExist = <<<SQL
SELECT *
FROM table
WHERE EXISTS (
SELECT *
FROM table
WHERE table.col1 = ?
AND table.col2 = ?
);
SQL;
try{
$stmtExist = $db->prepare($reqExist) ;
$stmtExist -> bindParam (1, $col1,PDO::PARAM_STR);
$stmtExist -> bindParam (1, $col2,PDO::PARAM_STR);
$stmtExist -> execute()
$resExist = $stmtExist -> fetch();
if ($resExist<>FALSE){
//existe traitement;
}
else{
//nexiste pas traitement;
} |
J'étais aussi tenté par rowCount() sur un SELECT (code plus court à écrire - pas sûr de la validité le l'argument :ange:), mais la doc semble le déconseiller…?
Question subsidiaire, les tests :
if (intval($resCount["COUNT(*)"])==0){} (ligne 15 pour COUNT)
et
if ($resExist<>FALSE){}(ligne 20 pour EXISTS)
sont-ils écrit proprement? Je n’y suis arrivé qu’après de nombreux tâtonnements
Merci pour vos conseils:)