Willkommen in der Webstatt Zum Webstatt Blog und Stories
Snake am 29.08.07 15:45

Hallo zusammen, ich steh grad bischen aufm Schlauch.

Vorhaben: Tabellen aufräumen.
Da ich in dem gegebenen Framework ( WCF ) nicht abfangen kann, wenn ein User gelöscht wurde, muss ich mittels zeitgesteuerten Aufträgen die Datenbank aufräumen.

Tabellenstruktur:
CREATE TABLE `wcf1_comc_blog_comments` (
`commentID` int(10) NOT NULL auto_increment,
`itemID` int(10) NOT NULL,
`userID` int(10) NOT NULL,
`username` varchar(255) NOT NULL,
`comment` text NOT NULL,
`time` int(10) NOT NULL,
PRIMARY KEY (`commentID`)
) ENGINE=MyISAM;


CREATE TABLE `wcf1_comc_blog_items` (
`itemID` int(10) NOT NULL auto_increment,
`userID` int(10) NOT NULL,
`categoryID` int(10) NOT NULL,
`subject` varchar(255) NOT NULL,
`text` text NOT NULL,
`time` int(10) NOT NULL,
PRIMARY KEY (`itemID`)
) ENGINE=MyISAM;


Nun ist zu beachten: die userID aus den Kommentaren bezieht sich auf den User, der den Kommentar geschrieben hat. um also alle Kommentare, die für einen User gegeben wurden zu löschen, muss ein Umweg über die items Tabelle gegangen werden.
Ich versuche das Problem so zu lösen:

DELETE FROM wcf1_comc_blog_comments c
LEFT JOIN wcf1_comc_blog_items i USING(itemID)
LEFT JOIN wcf1_user u ON(i.userID=u.userID) WHERE u.userID is NULL

Doch der MySQL Server meint:

Quote
#1064 - 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 'LEFT JOIN wcf1_comc_blog_items i USING(itemID)
LEFT JOIN wcf1_user u ON(i.userI' at line 2


Irgendwie seh ich den Syntaxfehler nur nicht?
Warum ich übrigends das letzte mal ein ON statt einem USING nehm: userID ist ja doppelt, einmal in comments und einmal in items. deswegen muss definiert werden, welches userID er vergleichen soll

Meine alternative wäre: in die comments tabelle "einfach" noch eine weitere spalte hinzuzufügen, in der die userID des schreibers des Blogs steht, um es dann nacher komfortabel zu löschen.

Ich bin Dankbar für jede Hilfe

netcup.de Warum gibt es hier Werbung?
Wasili am 29.08.07 16:57

Und wenn du beim ersten Join *nicht* Using gebrauchst?
Bei Zwei Joins hatte ich auch immer Probleme, wenn ich Using gebraucht habe, die Spalte aber nur in 2 der 3 Tabellen war.

Snake am 29.08.07 17:14

gleicher fehler beim ON.

allerdings hatte ich noch nie probleme mit USING. und ich hab querys die gehen über 5 und mehr tabellen...

mab mab am 29.08.07 19:27

stell mal deine anfrage ein bisschen um:

delete from wcf1_comc_blog_comments AS u
from wcf1_comc_blog_comments c
.................


geht irgendwie auch mit NOT EXITS :)

Wasili am 29.08.07 19:41

Klammern weglassen. On setzt keine Klammern vorraus.

Snake am 01.09.07 13:51

hab es inzwischen auf mehrere verschiedene wege versucht, im delete zu joinen. scheinbar geht das nicht.

also selecte ich nun einfach und lösch dann in der schleife...unschön aber da es eh en cronjob is wayne

Wasili am 01.09.07 16:51

Hast du auch die Klammern bei ON weggelassen, wie ich empfohlen habe? ON ist keine Funktion wie USING(), also entweder ganz weglassen oder einen Leerschritt dazwischen stellen. Wobei bei einem Argument die Klammern überflüssig sind.

mab mab am 01.09.07 16:52

weiß auch nicht, dein join müsst doch eigentlich gehen..

DELETE FROM wcf1_comc_blog_comments
FROM wcf1_comc_blog_comments c LEFT JOIN wcf1_comc_blog_items i
ON c.itemID = i.itemID
LEFT JOIN wcf1_user u
ON i.userID=u.userID
WHERE u.userID is NULL


kannst aber auch mal ein zwei datensätze mit tabellen struktur hier posten, dann übertrag ich das in toad und test mal. würd mich schon interessieren wie der join ausschaut ;-)

noch besser ist es aber, wenn du dir die ganzen cronjobs und das nachsäubern sparst. falls es überhaupt geht, dann lass die kommentare doch gleich automatisch löschen, wenn ein user aus dem system gelöscht wird.

Snake am 01.09.07 17:03

Quote
Original von Wasili
Hast du auch die Klammern bei ON weggelassen, wie ich empfohlen habe? ON ist keine Funktion wie USING(), also entweder ganz weglassen oder einen Leerschritt dazwischen stellen. Wobei bei einem Argument die Klammern überflüssig sind.

hab ich probiert, half nicht.

Quote
Original von mab
noch besser ist es aber, wenn du dir die ganzen cronjobs und das nachsäubern sparst. falls es überhaupt geht, dann lass die kommentare doch gleich automatisch löschen, wenn ein user aus dem system gelöscht wird.


da verweise ich auf mein startpost, in dem ich schrieb:

Quote
Original von Snake
Da ich in dem gegebenen Framework ( WCF ) nicht abfangen kann, wenn ein User gelöscht wurde, muss ich mittels zeitgesteuerten Aufträgen die Datenbank aufräumen.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt