(
SELECT value
FROM supertrend
WHERE currency = :currency
AND time < :opentime
ORDER BY time DESC LIMIT 1
) UNION (
SELECT value
FROM supertrend
WHERE currency = :currency
AND time > :closetime
ORDER BY time ASC LIMIT 1
)
A moins de faire une jointure sur les MIN/MAX de time sur la période donnée ? Genre :
SELECT value
FROM supertrend
/*LEFT*/ JOIN (
SELECT MIN(time) AS min, MAX(time) AS max
FROM supertrend
WHERE currency = :currency
AND time < :opentime
AND time > :closetime
) t ON supertrend.time IN(t.min, t.max)
WHERE currency = :currency
Il faut aussi voir comment doit être géré l'absence de ligne : quid si, par exemple, seule l'une des deux requêtes renvoie quelque chose, comment tu distingues, s'il y en avait besoin, à quelle (sous-)requête correspond cet unique résultat ?
J'ai fais ceci pour obtenir ce que je recherchais :
$select_supertrend_test = '(
SELECT value
FROM supertrend
WHERE currency = :currency
AND time < :opentime
ORDER BY time DESC LIMIT 1
) UNION (
SELECT value
FROM supertrend
WHERE currency = :currency
AND time > :closetime
ORDER BY time ASC LIMIT 1
)';
$requete = $bdd->prepare($select_supertrend_test);
$requete->bindValue(':currency', $row['currency'], PDO::PARAM_STR);
$requete->bindValue(':opentime', substr($candlesticks['498_opentime'], 0, -3), PDO::PARAM_STR);
$requete->bindValue(':closetime', substr($candlesticks['498_closetime'], 0, -3), PDO::PARAM_STR);
$requete->execute();
$supertrend_value = array();
foreach ($requete as $row) {
$supertrend_value[] = $row['value'];
}
echo $supertrend_value[0].' / '.$supertrend_value[1];
$requete->closeCursor();
Je sais pas si il y a plus simple...
- Edité par MickaelL.L 29 novembre 2021 à 15:12:43
Pas besoin de réécrire fetchAll (en mode PDO::FETCH_COLUMN), tu pourrais t'épargner les lignes 22 à 30.
Attention à la ligne 32, avec cette requête tu peux avoir moins de 2 lignes à moins vraiment d'être assuré de toujours avoir au moins une ligne pour chacune des sous-requêtes.
Ok merci julp pour tes conseils toujours pertinents.
Fusionner 2 requetes SQL possedants un WHERE diff
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli