2010-06-04 9 views
0

Voici ma question:erreur de syntaxe Sql

$query="Delete b 
Where Exists 
    (
     Select 1 
     From a 
     Where a.poster_password = '$pass' 
     And a.ad_id = '$id' 
     And a.classified_id = b.classified_id 
    ) 
Delete a 
Where a.poster_password = '$pass' 
And a.ad_id = '$id'"; 

Je reçois cette erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Where Exists (Select 1 From a Where a.poster_p' at line 2

Si vous avez besoin de plus d'entrée laissez-moi savoir ...

Quel est le problème ici?

Merci

UDPATE:

Juste Q: Ai-je besoin de préciser aussi que = "ce tableau" et b = "une autre table" ou ne MySql obtenir que par ce code?

En ce qui concerne le nouveau code affiché où utiliser FROM et un point-virgule de terminaison, ne fonctionnera pas et donner cette erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Delete FROM a Where a.poster_password = 'xxxxxxxxxxxxxxxxxxxxx' at line 10

MAJ2:

$query="Delete FROM $sql_table 
     Where Exists 
     (
      Select 1 
      From classified 
      Where classified.poster_password = '$pass' 
      And classified.ad_id = '$id' 
      And classified.classified_id = $sql_table.classified_id 
     ); 
     Delete FROM classified 
     Where classified.poster_password = '$pass' 
     And classified.ad_id = '$id'"; 

Et quand je echo $query: (le fordon est dans ce cas la variable $sql_table.)

Delete FROM fordon 
Where Exists 
( 
    Select 1 
    From classified 
    Where classified.poster_password = 'xxxxx' 
    And classified.ad_id = 'motorbat_166250627' 
    And classified.classified_id = fordon.classified_id 
); 
Delete FROM classified 
Where classified.poster_password = 'xxxxx' 
And classified.ad_id = 'motorbat_166250627' 

Merci encore

+0

Avez-vous essayé d'enlever la deuxième requête ('Supprimer a') et d'exécuter seulement la première? –

+0

Je pense que c'était mysql version 5.1 btw ... Peter: Non, je n'ai pas –

Répondre

1

Vous ne spécifiez pas les tables à supprimer. Essayez:

$query="Delete FROM b 
Where Exists 
    (
     Select 1 
     From a 
     Where a.poster_password = '$pass' 
     And a.ad_id = '$id' 
     And a.classified_id = b.classified_id 
    ); 
Delete FROM a 
Where a.poster_password = '$pass' 
And a.ad_id = '$id'"; 

J'ai également ajouté un point-virgule après la fin de la première requête DELETE. Si vous voulez exécuter les deux en même temps, vous aurez besoin d'un séparateur pour terminer la première requête, avant d'exécuter la deuxième version.

Re. votre question éditer à propos de MySQL "obtenir" les tables - si a et b sont des alias ici, alors non, MySQL ne sait pas ce que a et b sont. Vous devrez aliaser les tables, ou remplacer a et b par les noms de table réels.

+0

Vérifiez ma mise à jour s'il vous plaît, cela ne fonctionnera pas pour une raison quelconque –

+0

Okay, changé les alias, mais toujours obtenir la même erreur dans la mise à jour de mon Q ... hmm –

+0

Pouvez-vous poster votre chaîne de requête exacte maintenant? – richsage

0

Les deux suppressions doivent être des instructions séparées (et exécutées séparément).

+0

MySQL suppose des suppressions multi-tables: http://dev.mysql.com/doc/refman/5.0/fr/delete.html. Cependant, la syntaxe de l'OP semble incorrecte. Il devrait y avoir un 'FROM 'dedans. –