G
grosnours
ex membre
Te reste donc plus qu'à faire deux requêtes ... mysql sux
Dans ce cas précis il y a moyen de se passer de sous requête :grosnours a dit:Te reste donc plus qu'à faire deux requêtes ... mysql sux
Mouais, quand même...grosnours a dit:Y a des jointures en mysql 4.0 ? Jpensais que ça se limite à select,insert,delete
+1 enfin ca c'est de la vraie database SQLBingo a dit:Ouais, les versions pré-4.1 sont vraiment trop limitées.
Demande si ils n'ont pas du PostgreSQL, y a que ça devrai !
Ouais, mais va trouver un hébergeur bon marché en PostgreSQL...LaRaclure a dit:+1 enfin ca c'est de la vraie database SQL
Ben je suis chez OVH en 90 plan qui coûte 65¤ par an et je ne pense pas qu'il y ai PostgreSQL.Bingo a dit:Ouais, mais va trouver un hébergeur bon marché en PostgreSQL...
J'ai trouvé Lost Oasis (30¤ HT par an), tout le reste c'est au dessus de 50¤ par an.
En gros, c'est plus pour ceux qui peuvent se payer un serveur que pour ceux qui sont en hébergement mutualisé.
SELECT M.idMembre,M.pseudo, MT.idMembreTeam
FROM membreTeam MT NATURAL RIGHT OUTER JOIN membre M
WHERE M.acces=1
AND (MT.idMembreTeam IS NULL OR MT.idLineUp <> '$_POST[idLineUp]')
Oui je teste la tienne, je me suis rendu compte que ma solution est incorrecte.Bingo a dit:Effectivement, chez OVH il n'y a pas PostgreSQL.
Pour ta requête, tu ne devrais pas utiliser de RIGHT JOIN (c'est réputé peu portable), utilise plutôt des LEFT JOIN.
Et ici, je ne comprends pas pourquoi tu utilises NATURAL ? Ca ne devrait même pas être autorisé, un "NATURAL JOIN" ça joint deux tables sur TOUTES leurs colonnes !
A mon avis c'est une tolérance de MySQL de te laisser faire ça, mais c'est incorrect.
Essaye avec la requête que j'ai postée, c'est la méthode "consacrée" pour faire ça sans sous-requête.
SELECT idMembre,pseudo FROM membre WHERE acces=1
AND idMembre NOT IN (
SELECT idMembre FROM membreTeam WHERE idLineUp='$_POST[idLineUp]'
)
Ca dépend. Celui là on peut.grosnours a dit:Il me semble me souvenir qu'on ne peut pas remplacer un NOT IN par une jointure.
Pourtant j'obtiens bien ce que je veux...Bingo a dit:Ca dépend. Celui là on peut.
Mais sa requête avec son 'NOT IN' ne fait déjà pas ce qu'il veut.
Bon celà semble fonctionner.Bingo a dit:Ta requête te donne les membres qui ont acces = 1 et qui n'appartiennent pas au lineup selectionné. Elle ne fais pas vraiment ce que tu dis.
Pour ça tu dois faire :
SELECT m.idMembre, m.pseudo
FROM membre AS m LEFT JOIN membreTeam AS mt
ON (m.idMembre = mt.idMembre)
WHERE m.acces = 1 AND mt.idMembre IS NULL
UNION
SELECT m.idMembre, m.pseudo
FROM membre AS m LEFT JOIN membreTeam AS mt1
ON (m.idMembre = mt1.idMembre AND mt1.idLineUp='$_POST[idLineUp])
LEFT JOIN membreTeam AS mt2
ON (m.idMembre = mt2.idMembre)
WHERE mt1.idMembre IS NULL AND mt2.idMembre IS NOT NULL;
Ou un truc dans le genre quoi...
OK, vérifie bien quand même parce que je suis pas sûr d'avoir compris ce que tu voulais comme résutat (ne sachant pas ce que signifient exactement les champs, c'est pas évident).k o D a dit:Bon celà semble fonctionner.
Je vais faire des tests pour çà mais à 1ère vue, çà tourne.
J'ai fait pas mal de test et çà passe comme il faut.Bingo a dit:OK, vérifie bien quand même parce que je suis pas sûr d'avoir compris ce que tu voulais comme résutat (ne sachant pas ce que signifient exactement les champs, c'est pas évident).