J'ai problème ou mon left join ne récupère qu'un seul row.. et pas plusieurs rows.. :
SELECT tis_sint.id FROM tis_mast LEFT JOIN tis_sint ON tis_sint.idu = tis_mast.idu AND tis_sint.numid = tis_mast.numid WHERE tis_mast.id NOT IN ($t) AND tis_mast.dop >= `2021-01-01` ORDER BY RAND() LIMIT 2
Donc là, cette requête doit à partir de le table tis_mast trouvé des articles... Si un article est trouvé, je prends avec left join des infos dans la table tis_sint.
Donc là, ce qu'il devrait me retourner ce sont les id 2 et 3, sauf que lui, il me retourne qu'un seul row, et aléatoirement, c'est à dire soit le 2 ou soit le 3...
Je ne comprends pas pourquoi ?... Moi ce que je veux c'est avoir le 2 et le 3..
Merci.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
En effet, je ne comprends pas pourquoi la requête ne remonte pas les deux enregistrements, en effet ...
CentreDordi a écrit:
AND tis_mast.dop >= `2021-01-01`
A regarder, mais dans ta requête postée il y a des quotes obliques ... Cela devrait retourner une erreur ... tu devrais avoir des apostrophes ...
Au passage, ici pas besoin de LEFT JOIN, une jointure interne (INNER) est suffisante ...
Essaye ainsi :
SELECT S.id
FROM
tis_mast M
INNER JOIN tis_sint S
ON S.idu = M.idu
AND S.numid = M.numid
WHERE
M.id NOT IN ($t)
AND M.dop >= '2021-01-01'
ORDER BY RAND()
LIMIT 2
SELECT S.id, M.id FROM tis_mast M INNER JOIN tis_sint S ON S.idu = M.idu AND S.numid = M.numid WHERE M.id AND M.dop >= '2021-01-01' ORDER BY RAND()
en enlevant la LIMIT 2, et là j'ai bien tous les rows de tis_sint. Mais j'ai aussi tous les rows de tis_mast.
table tis_mast:
et table tis_sint:
résultat:
Voilà...
Mais là le problème est que vu que je n'ai pas de LIMIT 2, ça me prend tous les rows de tis_mast, mais moi je ne veux que 2 rows de tis_mast et tous les infos qui vont avec tis_sint...
- Edité par CentreDordi 10 février 2021 à 13:33:14
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Juste, ça c'est en train de me prendre un temps fou à résoudre.. donc je crois que je vais plutôt faire 2 requêtes séparés... l'une pour select les articles depuis tis_mast, l'autre avec les idu et numid de tis_mast prendre les infos de tis_sint... au moins j'aurais pas de problème..
Je te remercie pour ton aide.. en plus j'ai vu que dans cette section, tu sauves la vie de grand monde... merci..
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Ce dont j'ai peur, c'est que ce soit dans ton code (PHP ?) que tu ne boucles pas sur les résultats ...
Exemple :
<?php
$bdd = new PDO( ... );
$requete = $bdd->prepare( "
SELECT S.id
FROM
tis_mast M
INNER JOIN tis_sint S
ON S.idu = M.idu
AND S.numid = M.numid
WHERE
M.id NOT IN ( $t )
AND M.dop >= :a
ORDER BY RAND()
LIMIT 2"
);
$requete->execute( array(
':a' => $_POST['date']
));
$resultats = $requete->fetchAll();
foreach( $resultats as $resultat ) {
var_dump( $resultat['id'] );
}
?>
L'important ici c'est le fetchAll, au lieu d'un fetch ...
vu que cet après-midi j'ai changé la manière d'avoir les articles etc.. j'ai aussi avancer sur d'autre chose en modifiant les requêtes, avec des calculs entre les requêtes, donc ça ne servira pas à grand chose si on arrivait à résoudre ceci.. sinon ça me prendra encore des heures de modification..
Donc je préfère qu'on en reste là, ça te fera une enquête en moins lol...
Je te remercie pour ton aide (et pour ta patience sur ce sujet un peu mystérieux) !
Bonne semaine.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
SQL LEFT JOIN récupre qu'un seul row
× 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.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.
Et tu auras dans cette petite ruelle au nom d'explore, une petite pièce d'or.