Avatar billede ofirpeter Nybegynder
07. august 2006 - 17:15 Der er 11 kommentarer og
1 løsning

Syntax fejl i MySQL kald.

mysql_query("
  DELETE FROM annonceliste
    WHERE sessionsid ='$session' AND
      NOT EXISTS(
        SELECT * FROM specifikation_annonce
        WHERE annonceliste.annonceid = specifikation_annonce.annonceid
        AND specifikation_annonce.specid ='118'
        AND value = '68 hd'
      )
")or die(mysql_error());

Jeg får følgende fejl når jeg kører scriptet. Nogen der har et bud på hvad fejlen består af?

"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 'EXISTS (SELECT * FROM specifikation_annonce WHE"
Avatar billede arne_v Ekspert
07. august 2006 - 17:22 #1
hvilken MySQL version ?
Avatar billede ofirpeter Nybegynder
07. august 2006 - 17:27 #2
MySQL 4.0.24
Avatar billede arne_v Ekspert
07. august 2006 - 17:34 #3
den understoetter ikke sub select

og WHERE EXISTS SELECT er en sub select
Avatar billede ofirpeter Nybegynder
07. august 2006 - 17:36 #4
Mærkeligt, den står ellers i manualen: http://dev.mysql.com/doc/refman/4.1/en/exists-and-not-exists-subqueries.html

Hvad har jeg af andre muligheder i min MySQL version?
Avatar billede arne_v Ekspert
07. august 2006 - 17:41 #5
det der er 4.1 manualen og du koerer jo 4.0 ...
Avatar billede ofirpeter Nybegynder
07. august 2006 - 17:54 #6
Det er også rigtigt. Jeg er lidt på bar bund nu, har du nogen forslag til hvordan jeg elers kunne sætte det op?
Avatar billede pidgeot Nybegynder
07. august 2006 - 17:58 #7
Start med at lave følgende select:
SELECT annonceid FROM specifikation_annonce WHERE specifikation_annonce.specid ='118' AND value = '68 hd'

Hiv alle de resulterende ID's ud i en streng, adskilt af komma. (Det lader til du bruger PHP, så du kan smide dem i et array og dernæst lave om til en streng med explode())

Kør dernæst denne delete:
DELETE FROM annonceliste WHERE sessionsid='$session' AND annonceid NOT IN ($idliste)
Avatar billede arne_v Ekspert
07. august 2006 - 18:20 #8
det er nok den nemmeste loesning

alternativet er at lave en DELETE med en JOIN

det boer ogsaa kunne lade sig goere
Avatar billede ofirpeter Nybegynder
07. august 2006 - 19:02 #9
Lave en delete med en join? Kan du uddybe det? Jeg kan forestille mig at det performer bedre end pidgeot ellers udmærkede forslag?
Avatar billede arne_v Ekspert
07. august 2006 - 19:11 #10
ikke noedvendigvis men PHP koden er simplere

http://dev.mysql.com/doc/refman/4.1/en/delete.html

et stykke nede:

From MySQL 4.0, you can specify multiple tables in the DELETE statement to delete rows from one or more tables depending on a particular condition in multiple tables. However, you cannot use ORDER BY or LIMIT in a multiple-table DELETE.

You can specify multiple tables in a DELETE statement to delete rows from one or more tables depending on the particular condition in the WHERE clause. However, you cannot use ORDER BY or LIMIT in a multiple-table DELETE. The table_references clause lists the tables involved in the join. Its syntax is described in Section 13.2.7.1, “JOIN Syntax”.

The first multiple-table DELETE syntax is supported starting from MySQL 4.0.0. The second is supported starting from MySQL 4.0.2.

For the first multiple-table syntax, only matching rows from the tables listed before the FROM clause are deleted. For the second multiple-table syntax, only matching rows from the tables listed in the FROM clause (before the USING clause) are deleted. The effect is that you can delete rows from many tables at the same time and have additional tables that are used only for searching:

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 tables when searching for rows to delete, but delete matching rows only from tables t1 and t2.

The preceding examples show inner joins that use the comma operator, but multiple-table DELETE statements can use any type of join allowed in SELECT statements, such as LEFT JOIN.
Avatar billede ofirpeter Nybegynder
14. august 2006 - 13:17 #11
Tak for hjælpen arne_v, du må meget gerne svare.
Avatar billede arne_v Ekspert
14. august 2006 - 13:25 #12
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester