Select from und DELETE miteinander verbinden

  • Themenstarter Themenstarter fercules
  • Beginndatum Beginndatum
F

fercules

hallo leute,

das ist mein erster thread her. bin wirklich begeistert, dies scheint eines der foren zu sein, wo man sich wirklich gegenseitig hilft, anstatt nur dumme antworten zu geben wie bei wer weiss was....

wie dem auch sei, ich hab mich ziemlich mit einem problem aufgehängt. und zwar möchte ich daten aus einer mysql db lesen und parallel dazu alte datensätze automatisch löschen. wierum das nun geschieht ist eigentlich egal, am besten erst löschen dann die "neuen" datensätze auslesen.

ich hab schon vieles probiert darunter auch das hier:

$sql = "SELECT * FROM shop_basket WHERE sid = '$sid' ORDER BY titel ASC AND DELETE FROM shop_basket WHERE jetzt < $ablauf";

leider funktioniert es nicht, ich hab noch ganz andere sachen probiert. in meinem php buch steht auch nichts darüber, wie man diese zwei abfragen miteinander verbindet. in anderen foren und bei google hab ich mich auch nicht schlau machen können, wobei ich einmal auf "JOIN" gestoßen bin. hats damit vielleicht was zutun? irgendwie muss ich die DB doch erst "säubern", also alte datensätze löschen, und dann abfragen können.

beste grüße
fercules
 
Soweit ich weiß lassen sich nur INSERT und SELECT kombinieren...
Aber auch nur wenn INSERT der erste Befehl ist...

JOIN ist ein SQL Befehl zum Auslesen von daten aus verschiedenen Tabellen der DB

z.B.

SELECT a.userid,b.username FROM mytable as a LEFT JOIN mytable as b ON a.sid = b.sid


müsstest also erst SELECTen und dann DELETEn
 
komisch

komisch, also eigentlich bin ich kein totaler newbie mehr, aber hier das sagt mir rein gar nichts und erinnert mich auch nicht wirklich an mysql

SELECT a.userid,b.username FROM mytable as a LEFT JOIN mytable as b ON a.sid = b.sid

wofür das mit dem left join steht wieß ich nach wie vor nicht, das war ja auch mein eigentliches problem.

gruß
fercules
 
ok

danke, habe das problem schon gelöst in dem ich einfach zwei separate abfragen gemacht hab. die erste zum überprüfen und deleten, die zweite dann zum anzeigen der verbliebenen daten.

grüße
fercules
 
Zuletzt bearbeitet von einem Moderator:
Benutze doch UPDATE. so kannst du die vorhandenen daten Überschreiben.
Für denn fals das du sie vorherbrauchst erst mit SElect und dannach Update bzw. zum Löschen DELETE ...

oder ich hab deine Frage jetzt missverstanden.
 
löschen nicht überschreiben

ich wollte sie ja nicht überschreiben, sondern komplett löschen. aber ich habs ja schon raus, danke :-)
 
performance

samma, meinst du das reißt meine performance arg runter? also ich habs getestet und es funktioniert genau so, wie ichs will. aber letztendlich hab ich jetzt im prinzip zwei mysql connections....einmal $sql, für den delete und einmal $sql2 für die anzeige der daten....

fercules
 
Re: komisch

Original geschrieben von fercules
komisch, also eigentlich bin ich kein totaler newbie mehr, aber hier das sagt mir rein gar nichts und erinnert mich auch nicht wirklich an mysql
Ist aber völlig korrekte MySQL-Syntax.

Original geschrieben von fercules

SELECT a.userid,b.username FROM mytable as a LEFT JOIN mytable as b ON a.sid = b.sid

wofür das mit dem left join steht wieß ich nach wie vor nicht, das war ja auch mein eigentliches problem.

Also das beispiel oben ist nicht so gut, weil Du da die Tabelle auf sich selbst joinen lässt. Nehmen wir mal als Beispeil

Code:
SELECT user.userid,user.username, warenkorb.produkt FROM t_user as user LEFT JOIN t_warenkorb as warenkorb ON user.userid= warenkorb.userid
So, jetzt nehmen wir das ganze mal auseinander:

Wir haben zwei Tabellen. Einmal die t_user, in der sich die Daten der Kunden befinden und dann die Tabelle t_warenkorb, in der sich eigentlich nur die jeweilige ID von einem Produkt aus dem Shop und die zugehörige Kunden-ID, der das Produkt in seinem Warenkorb liegen hat, befindet.

So, jetzt möchtest Du natürlich wissen, was der Kunde, der sich gerade auf der Website im Shop befindet in seinem Warenkorb liegen hat. Also verbindest Du die beiden Tabellen miteinander. Die SQL-Anweisung übersetzt:

Code:
Gib mir alle Produkte aus der Tabelle t_warenkorb wo die Spalte useridmit der Spalte userid aus der Tabelle t_user übereinstimmt.
Somit bekommst Du dann alle Produkte aus dem Warenkorb, die ein bestimmer Kunde ausgewählt hat.

Die JOIN-Funktionen in MySQL/SQL sind eine mächtige Funktion, wenn man das Prinzip einmal verstanden hat, lässt sich so eine gut und übersichtliche Datenbank Struktur anlegen. Lies Dir mal auf den Beiden Links unten Die Beschreibung durch, vor allem auf der zweiten Seite werden JOINS sehr gut erklärt.

Und jetzt nochmal zu deinem Problem:

Mach einfach, bevor Du die Daten aus der Datenbank abfragst, ein DELETE auf die Tabelle. Also zwei SQL-Queries nacheinander.

http://www.mysql.de/doc/de/JOIN.html
http://www.infos24.de/mysqle/handbuch/12_mysql_joins.htm


Original geschrieben von fercules
samma, meinst du das reißt meine performance arg runter? also ich habs getestet und es funktioniert genau so, wie ichs will. aber letztendlich hab ich jetzt im prinzip zwei mysql connections....einmal $sql, für den delete und einmal $sql2 für die anzeige der daten....
Du hast nicht zwei MySQL-Connections, sondern zwei MySQL-Queries. Das ist ein Unterschied. Und ein normaler Webserver sollte schon im Stande sein das zu verarbeiten. Natürlich sollte man da wo es geht, mehrere SQL-Anweisungen zusammen fügen (eben mit JOINS). So hat man dann ein großes RecordSet, woraus man dann die gewünschten Daten darstellen kann.

Noch zum Abschluss: fercules, achte doch bitte auf die die Netiquette, insbesondere was deine Groß- und Kleinschreibung betrifft. :)
 
Zuletzt bearbeitet:
na bei der Performance will ich mich nicht Festelgen.
soweit ich weis gibts da eigentlich keine Performace einbusen und wenn ja sind bzw. sollen sie kaum messbare ergebnisse liefern.
habe das selber schon mal gemacht.
Dies bezog auf ein teil der community wo der user halt Möglichkeit hat seine Daten zu Aktuallisieren.
Und ich habe da keine Probleme mit.
 

Neue Beiträge

Zurück