php/mysql

jo-el
Invité n'ayant pas de compte PHPfrance

04 avr. 2021, 13:55

Bonjour,
J'ai par ex. une table avec 3 colonnes:
id | nom | refer
1 | poli | 1
2 | jean | 1
3 | yae | 0
4 | ary | 4

Puis avec:

Code : Tout sélectionner

$req= $bdd->query("SELECT * FROM latable WHERE refer=id ");


j'obtiens 1 ligne la 1ère mais je voudrais obtenir les 2 lignes refer ='1'

Si j'écris refer='1' au lieu de refer=id j'ai bien mes 2 lignes .
Comment écrire pour que id valeur 1 se transforme en variable '1' ?

Mammouth du PHP | 2703 Messages

04 avr. 2021, 14:11

vous dites :
" Si j'écris refer='1' au lieu de refer=id j'ai bien mes 2 lignes ."
donc
$req= $bdd->query("SELECT * FROM latable WHERE refer='1' ");

jo-el
Invité n'ayant pas de compte PHPfrance

04 avr. 2021, 14:58

en réalité je ne connais pas la valeur de 'id',
ce que je voudrais c que refer = valeur de 'id' pour que s'affichent, dans l'exemple, les 2 lignes refer=' 1'
et non la ligne 1 correspondant à l'égalité refer=id.
Comment formuler pour que dans 'refer=id' id se transforme en variable ?

Mammouth du PHP | 2703 Messages

04 avr. 2021, 15:09

avec 2 requêtes, une pour récupérer la valeur de l'id qui est égale à refer, une seconde pour récupérer les lignes où refer vaut l'id trouvé par la première requête.

jo-el
Invité n'ayant pas de compte PHPfrance

04 avr. 2021, 15:29

je voulais faire plus simple :oops:

jo-el
Invité n'ayant pas de compte PHPfrance

04 avr. 2021, 15:37

oui avec 2 requêtes ça marche bien et s'il n'y a pas une autre possibilité comme je l'espérais ça ira,
merci de m'avoir répondu.

Mammouth du PHP | 2703 Messages

04 avr. 2021, 19:03

à débuger :
SELECT * FROM latable WHERE latable.refer in (select refer from latable where refer=id)

Mammouth du PHP | 1029 Messages

04 avr. 2021, 21:09

Bonsoirce que vous essayer de faire une jointure sur lui même.

ce qui ce traduit par :

Code : Tout sélectionner

select * from latable t1 inner join la table t2 on t1.id = t2.refer
En faisant un left outer join vous obtiendrez l'ensemble

Code : Tout sélectionner

select * from latable t1 left outer join la table t2 on t1.id = t2.refer
Malheureusement, votre conception de table à un léger défaut car "refer" possède un 0 , hors aucun id ne commence à 0, si vous vouliez noter qu'il n'y avais aucune correspondance dans ce cas, il faudrait alors remplacer ce 0 par null
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 avr. 2021, 11:53

Salutations !

J'arrive un peu pendant la bataille, mais peux tu préciser ce que tu veux faire exactement ? Quand tu fais refer = id, tu récupères les enregistrements pour lesquels les colonnes id et refer ont la même valeur. Est-ce que c'est ce que tu attends où tu veux juste les enregistrement qui ont pour refer 1 ou 4 ou 0 ...

Pour moi, tout ce qu'il y a à faire c'est remplacer la comparaison avec 'id' par une variable dans ta requête :
$req= $bdd->query("SELECT * FROM latable WHERE refer= " . $ref);
Si $ref a la valeur 1, il te retournera les deux enregistrement où refer = 1, si $ref = 0, tu auras le 3e et si $ref = 12 tu n'auras pas de résultat.

A toi ensuite de passer la bonne valeur de $ref en fonction de ce que tu veux récupérer comme enregistrements :)

Après si c'est pas ça du tout, au temps pour moi et je vous laisse approfondir la jointure ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...