Mysql auslese-/denkproblem
Basti316
- datenbank
0 suit0 Vinzenz Mai
Hallo zusammen!
Ich programiere schon seit über 4 Jahre mit Php und Mysql und habe noch nie so ein Denkfehler gehabt.
Ist auch das erste mal, dass ich in einem Forum Rat suche.
Mit Google hab ichs auch schon versucht, aber nichts gefunden...
Zu meinem Problem:
Ich baue gerade eine Site wo es um Austausch der verschiedensten Werbeformen geht.
Ich habe eine Datenbank wo sich die Werbekampagnen befinden und eine mit IPs zum Zweck einer Reloadsperre.
Könnte mir jemand einen Denkanstoss geben wie ich dies realisieren kann?
Ich habe Momentan folgende Lösung:
$abfrage = "SELECT ... FROM kampagne WHERE id != '8' AND id !='5' AND ...";
Erst wird die Datenbank mit den gespeicherten IPs ausgelesen und übergibt der zweiten Abfrage die Kampagnen IDs die noch in der Sperre sind.
So kann die zweite Abfrage ziemlich lang und Resourcenvernichtend werden.
Versteht ihr wie ich es meine?
Ist schwierig zu erklähren.
Vieleicht gibts da ne schöne Php Funktion die ich noch nicht kenne.
Vielen Dank schonmal!
Vieleicht gibts da ne schöne Php Funktion die ich noch nicht kenne.
nein, aber sql ;)
aber NOT und IN() könnten dir helfen ;)
aber NOT und IN() könnten dir helfen ;)
Vom Prinzip ja fast das selbe, gefällt mir irgendwie noch nicht.
Aber trotzdem Danke! Hab was neues gelernt.
Geht es vieleicht nicht einfacher?
Die Abfrage wird für Forced Bannerklicks benötigt.
Da können am Ende schon mal 50 - 100 auszugrenzende IDs sein. ;D
aber NOT und IN() könnten dir helfen ;)
Vom Prinzip ja fast das selbe, gefällt mir irgendwie noch nicht.
Aber trotzdem Danke! Hab was neues gelernt.Geht es vieleicht nicht einfacher?
subqueries
anstatt IN() händisch zu befüllen schreibst du einfach IN(SELECT id FROM foo WHERE bar = 1) - damit belastetst du das dbms nicht wirklich mehr und du musst nicht irgendwelche daten hin und her übertragen
Hallo
$abfrage = "SELECT ... FROM kampagne WHERE id != '8' AND id !='5' AND ...";
Erst wird die Datenbank mit den gespeicherten IPs ausgelesen und übergibt der zweiten Abfrage die Kampagnen IDs die noch in der Sperre sind.
Du begehst einen typischen Anfängerfehler und baust Joins bzw. hier ein Subselect mit PHP nach.
Wie von suit bereits erwähnt ist
WHERE id NOT IN (
SELECT <böse IDs>)
sehr einfach und sehr elegant. Nein, es gibt keine zwei getrennten Abfragen.
Voraussetzung: MySQL 4.1 oder neuer ...
Freundliche Grüße
Vinzenz