Willkommen in der Webstatt
User-1 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 xyz-48kbar für jede Hilfe

netcup.de Warum gibt es hier Werbung?
User-2 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.

User-1 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...

User-3 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 :)

User-2 am 29.08.07 19:41

Klammern weglassen. On setzt keine Klammern vorraus.

User-1 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

User-2 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.

User-3 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.

User-1 am 01.09.07 17:03

Quote
Original von Waxyz-190
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 xyz-126
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 xyz-193
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