Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3264 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  SQL via PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL via PHP

n°752385
kronab
Posté le 04-06-2004 à 12:19:13  profilanswer
 

Je suis désespéré, je n'arrive pas à exécuter une requête pourtant assez simple.  
Voici mes 2 tables :
--------------           -------------
 annonce                    tab2
   >.num                     >.num
                             >.num_tab2
 
.num est la clef primaire de annonce, .num et .num_tab2 est la clef primaire de tab2.
tab2.num est la clef externe de annonce.
 
Je souhaiterais supprimer les valeurs de tab2 qui n'ont pas de correspondance dans les annonces, soit tab2.num NOT IN annonce.num  
J'ai essayé de plusieurs façons :
1)
mysql_query("DELETE tab2.* FROM annonce,tab2 WHERE annonce.num<>tab2.num" );
->ça fait rien
 
2)
mysql_query("DELETE tab2.* FROM annonce,tab2 WHERE NOT
tab2.num  IN (annonce.num)" );
->ça fait rien
3)
avec  SELECT imbriqué, c'est pas mieux ça produit un erreur de syntaxe:
mysql_query("DELETE tab2.* FROM tab2 WHERE tab2.num NOT IN SELECT ( annonce.num FROM annonce)" );
 
Serait-ce un problème de NOT?
Comment faire?


Message édité par kronab le 04-06-2004 à 12:22:15

---------------
Site de covoiturage gratuit
mood
Publicité
Posté le 04-06-2004 à 12:19:13  profilanswer
 

n°752406
misterping​uin
Posté le 04-06-2004 à 12:35:33  profilanswer
 

si je ne dis pas de betise MySQL ne gere pas les requetes imbriquées (ou alors que récemment)
et NOT meme chose

n°752409
Beegee
Posté le 04-06-2004 à 12:39:36  profilanswer
 

+1 (pour le vieilles versions de mySql)
 
mais on est pas sûr qu'il utilise mySql (même si y a 99% de chances pour que ce soit le cas :D )
 
la principale erreur, ce serait pas le fait d'écrire :
'DELETE tab2.* FROM ...'
au lieu de :
'DELETE FROM ...' ? :)


Message édité par Beegee le 04-06-2004 à 12:39:58
n°752414
kronab
Posté le 04-06-2004 à 12:48:34  profilanswer
 

Ok merci, vos réponses me sont bien utiles.  
La solution : passer par une table temporaire?


---------------
Site de covoiturage gratuit
n°752460
urd-sama
waste of space
Posté le 04-06-2004 à 13:31:39  profilanswer
 

ou deux requêtes imbriquées

n°752916
titione
addicted
Posté le 04-06-2004 à 17:37:31  profilanswer
 

misterpinguin a écrit a écrit :

 MySQL ne gere pas les requetes imbriquées




 

urd-sama a écrit :

ou deux requêtes imbriquées


 
 :D


Message édité par titione le 04-06-2004 à 17:38:00
n°753519
urd-sama
waste of space
Posté le 05-06-2004 à 21:15:15  profilanswer
 

deux mysql_query si tu préfère :o
(deux recorset quoi, ché pas comment on dit en php :o)


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
n°753929
latruffe
Bdovore
Posté le 06-06-2004 à 15:13:32  profilanswer
 

MySQL4 commence à gerer des requètes imbriquées.

n°755768
KrisCool
“Verbeux„
Posté le 08-06-2004 à 09:09:02  profilanswer
 

Citation :


Starting with MySQL 4.1, all subquery forms and operations that the SQL standard requires are supported, as well as a few features that are MySQL-specific.


Citation :


Before MySQL 4.1, only nested queries of the form INSERT ... SELECT ... and REPLACE ... SELECT ... are supported. The IN() construct can be used in other contexts to test membership in a set of values.


 
http://dev.mysql.com/doc/mysql/en/Subqueries.html
http://dev.mysql.com/doc/mysql/en/ [...] eries.html

n°755783
titione
addicted
Posté le 08-06-2004 à 09:29:39  profilanswer
 

ouais mais hélàs tous les hébergeurs (mêmes pro) ne sont pas passés en mysql4.1 ;((

mood
Publicité
Posté le 08-06-2004 à 09:29:39  profilanswer
 

n°755791
Mara's dad
Yes I can !
Posté le 08-06-2004 à 09:33:44  profilanswer
 

Citation :

Je souhaiterais supprimer les valeurs de tab2 qui n'ont pas de correspondance dans les annonces, soit tab2.num NOT IN annonce.num  
J'ai essayé de plusieurs façons :


 
Autre manière de voir la chose SANS requête imbriquée, suivez le guide :
 
Sélection de tous les enreg de tab2 avec quand c'est possible les annonces correspondantes :

Code :
  1. SELECT
  2.     *
  3. FROM
  4.     tab2 LEFT JOIN annonce
  5. ON
  6.     tab2.num = annonce.num


 
Dans le résultat, annonce.num sera null pour les enregistrement sans correspndance.
 
Donc, si on ne veut que ceux là :

Code :
  1. SELECT
  2.     *
  3. FROM
  4.     tab2 LEFT JOIN annonce
  5. ON
  6.     tab2.num = annonce.num
  7. WHERE
  8.     annonce.num IS NULL


Et le tour est joué.
 
Reste plus qu'à écrire le DELETE :
 

Code :
  1. DELETE
  2.     tab2
  3. FROM
  4.     tab2 LEFT JOIN annonce
  5. ON
  6.     tab2.num = annonce.num
  7. WHERE
  8.     annonce.num IS NULL


 
Testé & approuvé par Mara's dad avec Mysql 4.0.14


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°755799
Mara's dad
Yes I can !
Posté le 08-06-2004 à 09:38:58  profilanswer
 

Regardez les exemples à la fin :
http://dev.mysql.com/doc/mysql/en/DELETE.html
Y'en a pas avec LEFT JOIN, seulement des liaisons normales, mais dans le texte, il est bien dit que ça marche avec LEFT JOIN :
 

Citation :

DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id;
 
Or:
 
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id;
 
These statements use all three files when searching for rows to delete, but delete matching rows only from tables t1 and t2.
 
The examples show inner joins using the comma operator, but multiple-table DELETE statements can use any type of join allowed in SELECT statements, such as LEFT JOIN.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°758754
Mara's dad
Yes I can !
Posté le 10-06-2004 à 09:20:47  profilanswer
 

Bon alors, elle vous plait pas ma solution de la mort qui fait tout en une seule requête ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  SQL via PHP

 

Sujets relatifs
Pb de requete sql dans une page php.[php] arrive pas a afficher le contenu d'une table SQL [nb inside]
probleme de creation d un compte sous sql serveru via phpprobleme pour creer des compte sql via php
[Php] - Resultat de la base SQL sur une page .PHP/SQL > fichiers SQL ou access ?
[PHP/SQL] Principe du "qui est en ligne"Parle couramment C, C++, PHP, SQL, HTML et un peu le français.
[PHP/SQL] Addition de valeur numérique d'un champ d'une table[PHP/SQL] Plusieurs conditions dans where ?
Plus de sujets relatifs à : SQL via PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR