Vieille requete SQL a la con qui marche pas

Vieille requete SQL a la con qui marche pas - Programmation

Marsh Posté le 18-10-2001 à 10:02:11    

delete from users  
where id=
 (Select id from users_stats where level = 0)
 
Marche pas...
Les noms sont bon et je pensais que la typographie aussi mais ca a pas l'air d'etre le cas

Reply

Marsh Posté le 18-10-2001 à 10:02:11   

Reply

Marsh Posté le 18-10-2001 à 10:12:33    

essaye ca:
 
delete from users  
where users.id=
 (Select users_stats.id from users_stats where level = 0)

Reply

Marsh Posté le 18-10-2001 à 10:13:14    

Salut,
 
Si la deuxieme partie de ta requete "Select id from users_stats where level = 0" ramène plusieurs enregistrement, celà ne risque pas de marcher.
Dans ce cas, ta requête doit devenir :
 
delete from users  
where id IN
(Select id from users_stats where level = 0)

Reply

Marsh Posté le 18-10-2001 à 10:15:54    

iskream a écrit a écrit :

Salut,
 
Si la deuxieme partie de ta requete "Select id from users_stats where level = 0" ramène plusieurs enregistrement, celà ne risque pas de marcher.
Dans ce cas, ta requête doit devenir :
 
delete from users  
where id IN
(Select id from users_stats where level = 0)  




 
 
 :jap:  
pas mieux


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 18-10-2001 à 10:18:38    

En fait je crois que c mysql qui n accepte pas les requetes imbriqués, j suis pas dans la merde la...

Reply

Marsh Posté le 18-10-2001 à 10:19:19    

Sebastien a écrit a écrit :

En fait je crois que c mysql qui n accepte pas les requetes imbriqués, j suis pas dans la merde la...  




 
si, mysql les acceptent sans problème.

Reply

Marsh Posté le 18-10-2001 à 10:21:19    

Ben c pas ce qui est dit sur le forum de phpfrance ou un truc comme ca..
Car la derniere partie de la requete toute seule fonctionne correctement...
Les deletes sur des conditions de la meme table aussi...

Reply

Marsh Posté le 18-10-2001 à 10:21:35    

Sebastien a écrit a écrit :

En fait je crois que c mysql qui n accepte pas les requetes imbriqués, j suis pas dans la merde la...  




 
MySQL est certes limité, mais pas à ce point là...il respecte quand meme les standards SQL :)

Reply

Marsh Posté le 18-10-2001 à 10:22:33    

iskream a raison dans le principe mais voila une meilleure facon décrire la requete (d'un point de vue optimisation) :
 
DELETE FROM USERS A    
WHERE EXISTS ( SELECT 'X' FROM USERS_STATS B WHERE B.ID = A.ID AND B.LEVEL = 0 );

Reply

Marsh Posté le 18-10-2001 à 10:24:25    

ipzorj a écrit a écrit :

iskream a raison dans le principe mais voila une meilleure facon décrire la requete (d'un point de vue optimisation) :
 
DELETE FROM USERS A    
WHERE EXISTS ( SELECT 'X' FROM USERS_STATS B WHERE B.ID = A.ID AND B.LEVEL = 0 );  




 
En effet, la clause IN a pour effet de plomber quelques peu les performances quand le volume commence à être conséquent.

Reply

Marsh Posté le 18-10-2001 à 10:24:25   

Reply

Marsh Posté le 18-10-2001 à 10:33:19    

Ca ca fonctionne
 SELECT A.ID
 FROM USERS_STATS AS B, USERS AS A  
WHERE B.UID = A.UID  
 
mais ca non :
SELECT ID
FROM USERS
where id exists (select id from users_stats)
ni
SELECT ID
FROM USERS
where id in (select id from users_stats)

Reply

Marsh Posté le 18-10-2001 à 10:38:02    

Vu a different endroit :
 
saches que sous MySQL est assez limité en fait  mais tu ne peux pas faire de REQUETES imbriquées par exemple...ce qui s'avère très embetant car tu dois le 'simuler' apres avec un tit traitement en php
 
et dans tous les cas MySQL ne fait pas de requetes imbriquées.
 
Pas évident avec mySQL parce qu'il n'accepte pas les sous requêtes

Reply

Marsh Posté le 18-10-2001 à 10:43:21    

et avec une jointure ca marcherai pas?
 
a mon avis si c possible faut eviter les requettes imbriqué , je pense que ca peu devenir vite lourd surtt ds l'écriture.
 
delete from users U, users_stats S  
where U.id= S.Id And S.level=0
 
mais bon je me trompe peut etre :D  
 
@++

 

[edtdd]--Message édité par saxgard--[/edtdd]

Reply

Marsh Posté le 18-10-2001 à 10:44:42    

Moi aussi, j'ai été bloqué pour certaines requêtes à cause de MySQl et par expérience, je peux le dire, MySQL ne suporte pas les requêtes imbriquées.

Reply

Marsh Posté le 18-10-2001 à 10:47:09    

saxgard a écrit a écrit :

et avec une jointure ca marcherai pas?
 
a mon avis si c possible faut eviter les requettes imbriqué , je pense que ca peu devenir vite lourd surtt ds l'écriture.
 
delete from users U, users_stats S  
where U.id= S.Id And S.level=0
 
mais bon je me trompe peut etre :D  
 
@++  
 
 




Une jointure, ca marche très bien si tu fait un select sur les deux tables.
 
Par contre, je vois pas comment on peut faire une jointure entre un select et un delete. :??:

Reply

Marsh Posté le 18-10-2001 à 10:48:08    

Ben j'y avais aussi pense mais je crois pas que tu puisses faire de jointure dans un delete, car la il va se baser sur 2 tables, c pas tres bon, voir ca risque d'etre chaud.
 
Il va me virer et dans user_stat et dans user la, quoique a la fin c bien ce que j'aurais voulu faire

Reply

Marsh Posté le 18-10-2001 à 10:48:32    

arf j'avais pas vu que ca avais déja étais dis les jointures , mais alors la je voix plus ou est le pb ;)
 
Sebastien si ca marche opurquoi tu ne fais pas comme ca alors?

Reply

Marsh Posté le 18-10-2001 à 10:49:19    

ah oauis pasbete , alors ta question est pertinente ;)
passe sous access alors  :lol:
 
bin alors personnellement ca m'étonne que mysql n'accepte pas les requetes imbriqués parceque des fois elles sont innévitable

 

[edtdd]--Message édité par saxgard--[/edtdd]

Reply

Marsh Posté le 18-10-2001 à 10:50:38    

Car a la base c pas un select que je veux faire mais un delete.
 
Je prenais le cas du select, car c plus connu plus comprehensible, et ceux qui connaissent le sql, savent ce que retourne un select. C le plus connu et plus simple.

Reply

Marsh Posté le 18-10-2001 à 10:54:58    

bon sinonj'ai une solution batard ;)
 
tu fais ta requete sur users_stats
et ensuite tu boucle et tu delete chaque élément dans users  
 
je sais c pas tres jolie mais ca marche ;)

 

[edtdd]--Message édité par saxgard--[/edtdd]

Reply

Marsh Posté le 18-10-2001 à 10:58:30    

Sachant que j ai 1674 users...

Reply

Marsh Posté le 18-10-2001 à 11:00:04    

ui mais ta pas 1674 users avec un level=0 non?
 
mais bon comme je t'ai dis c une solution batarde mais qui a le mérite de marcher, au moin tu n'est pas bloqué au cas ou  :D
 
cela dis 1674 c'est pas énorme je pense  ;)  
 
bonne chance @+

Reply

Marsh Posté le 18-10-2001 à 11:14:28    

faire 1400 delete a la main, merci mais non merci, je vais etre oblige de faire un petit prog php, c pas trop grave, mais bon quand je vois le ansi sql le fait directos..

Reply

Marsh Posté le 18-10-2001 à 11:19:50    

a la main a j'ai du raté une étape ;)
 
je pensé que c'étais en php ou un truc ds le genre

Reply

Marsh Posté le 18-10-2001 à 11:37:52    

Sebastien a écrit a écrit :

faire 1400 delete a la main, merci mais non merci, je vais etre oblige de faire un petit prog php, c pas trop grave, mais bon quand je vois le ansi sql le fait directos..  




C'est exactement ce que saxgard  
 
 voulais te dire de faire, un script php pour tout effacé.

Reply

Marsh Posté le 18-10-2001 à 12:11:10    

Ouais ben voila c fait, je disais que ca me fait mal de faire ca alors que le ansi sql le fais directement sans prog ni rien.

Reply

Marsh Posté le 18-10-2001 à 12:40:42    

ui je comprends bien mais des fois faut s'adapter avec l'outil qu'on a meme sic pas la meilleur solution , cependnat je pense aps qu'ele sois si horrible , mais la je pourrais pas dire
 
en tt cas je vais essayer de voir si je connaitrai pas une autre solution , bonne chance @+

Reply

Marsh Posté le 18-10-2001 à 14:27:59    

Na c bon te casse pas la tete je l'ai ecrite la fonction, c clair c rien du tout, mais bon c dommage.

Reply

Marsh Posté le 18-10-2001 à 14:28:48    

oki ;)

Reply

Marsh Posté le 18-10-2001 à 15:22:47    

vive oracle :)

Reply

Marsh Posté le 18-10-2001 à 16:21:26    

O oui mais bon c pas non plus les meme prix, et pas sur que ma boite accepte la difference, de plus ici nos bd oracle sont ctiques j suis pas sur qu'ils accepteront que j'y touche et comme j suis pas admin bdd/vms je prefere pas

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed