JeuWeb - Crée ton jeu par navigateur
comment avoir l'opposé d'un resultat en sql - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : comment avoir l'opposé d'un resultat en sql (/showthread.php?tid=455)

Pages : 1 2


comment avoir l'opposé d'un resultat en sql - joshua - 19-11-2006

Bonjour a tous!
Une question que je n'arrive pas a resoudre:
J'ai une requete sql qui me retourne des résultats. ces resultats je les insere dans une table.
Jusque la, rien d'anormal.
Maintenant, je souhaite inserer dans une table toutes les valeurs qui ne sont PAS résultats de cette requete.
Vous me direz, alors fait la requete inverse.
Et bien non. Car ca marche sur une requete 1...n mais pas sur une n....n.
Donc existe-t-il un moyen de faire un !select ????

Ma requete:

Code PHP :
<?php 
INSERT INTO tbl_planete_tmp
( coordonnee_x, coordonnee_y )
SELECT DISTINCT `x` , `y`
FROM `tbl_planete_ref` , `tbl_planete`
WHERE `tbl_planete`.`galaxie` =1
AND (
`
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x`
) * ( `
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x` ) + ( `tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` ) * ( `tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` ) <= ( `tbl_planete`.`taille` +5 ) * ( `tbl_planete`.`taille` +5 )



RE: comment avoir l'opposé d'un resultat en sql - Plume - 19-11-2006

Tu fais :
Code PHP :
<?php 
SELECT
... FROM ... WHERE ... NOT IN (SELECT ... FROM ... WHERE ...)
Je suis pas sûr mais je pense que c'est correct avec MySQL.


RE: comment avoir l'opposé d'un resultat en sql - joshua - 19-11-2006

argh ca marche po :'(
il me retourne 0 resultats....


RE: comment avoir l'opposé d'un resultat en sql - gtsoul - 19-11-2006

tu fais le contraire logique de la condition :

select a where b and c => select a where not(b) or not©


RE: comment avoir l'opposé d'un resultat en sql - joshua - 19-11-2006

Gtsoul, ca marche pas sur une n...n car chaque requete a des resultats qui devraient etre suprimés dans la requete suivante mais tout reste.....


RE: comment avoir l'opposé d'un resultat en sql - joshua - 20-11-2006

Bn, j'en suis arrivé a rajouter une table et a faire une soustraction par rapport a la base totale.... Ca devient costaud :p


RE: comment avoir l'opposé d'un resultat en sql - barst - 20-11-2006

Normalement, on utiliserais la commande MINUS en SQL mais elle n'existe pas en MySQL.

Par contre, en décortiquant ta requête, j'ai vu que le crtière de sélection est une opération arithmétique avec un comparateur, est-ce que tu as essayé de prendre le comparateur opposé ?

Code PHP :
<?php 
NSERT INTO tbl_planete_tmp
( coordonnee_x, coordonnee_y )
SELECT DISTINCT `x` , `y`
FROM `tbl_planete_ref` , `tbl_planete`
WHERE `tbl_planete`.`galaxie` =1
AND
(
`
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x`
)
*
( `
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x` )
+
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
*
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
> ( `
tbl_planete`.`taille` +5 ) * ( `tbl_planete`.`taille` +5 )



RE: comment avoir l'opposé d'un resultat en sql - joshua - 20-11-2006

le fait de prendre le comparateur opposé ne marche pas.
C'est ce que je disais dans le cas d'une interaction n...n par rapport a une interaction 1...n
Une interaction n...n renvoie ll'ensemble des reponses et non l'intersection de cellles-ci.
Pour expliquer:
prenons 5 points 1, 2, 3, 4, 5
imaginons que le fait de tester sur un point bloque els deux points autour.
on teste sur 2: seul 4 et 5 sont encore autorisés.
On teste sur 4: seul 1 et 2 sont autorisés.
Moralité: s'il y a un point en 2 et en 4, on ne peut plus en placer d'autre.
Et que rendra la requete qui fait le test en n..n?
elle dira que 1,2, 4, 5 sont autorisés.
Donc dans ce cas je suis obligé de passer par les points interdits: 1,2, 3, 4, 5 sont interdits et les soustraire a la reference pour arriver a 0.


RE: comment avoir l'opposé d'un resultat en sql - barst - 20-11-2006

Bon alors il n'y a plus que le NOT IN.
Le MINUS aurait été parfait pour ce cas là.
Code PHP :
<?php 
INSERT INTO tbl_planete_tmp
( coordonnee_x, coordonnee_y )
SELECT DISTINCT `x` , `y`
FROM `tbl_planete_ref`
WHERE `x` NOT IN(
SELECT DISTINCT `x`
FROM `tbl_planete_ref` , `tbl_planete`
WHERE `tbl_planete`.`galaxie` =1
AND
(
`
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x`
)
*
( `
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x` )
+
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
*
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
<= ( `
tbl_planete`.`taille` +5 ) * ( `tbl_planete`.`taille` +5 ))
AND
`
y` NOT IN(
SELECT DISTINCT `y`
FROM `tbl_planete_ref` , `tbl_planete`
WHERE `tbl_planete`.`galaxie` =1
AND
(
`
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x`
)
*
( `
tbl_planete_ref`.`x` - `tbl_planete`.`coordonnee_x` )
+
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
*
( `
tbl_planete_ref`.`y` - `tbl_planete`.`coordonnee_y` )
<= ( `
tbl_planete`.`taille` +5 ) * ( `tbl_planete`.`taille` +5 ))



RE: comment avoir l'opposé d'un resultat en sql - joshua - 20-11-2006

nouvelle requete qui foire.....
Code PHP :
<?php 
INSERT INTO tbl_planete_tmp
( coordonnee_x, coordonnee_y )
SELECT `x` , `y`
FROM `tbl_planete_ref` EXCEPT(

SELECT `x` , `y`
FROM `tbl_planete_tmp2`
)

des idées?