Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Heinz die Banner anzeigen die er noch nicht gesehen hat (JOIN?)

Frage Entwicklung Datenbanken

Mitglied: jakicoll

jakicoll (Level 1) - Jetzt verbinden

27.02.2009, aktualisiert 28.02.2009, 3198 Aufrufe, 4 Kommentare

Hey!
Also folgendes:
Ich habe in meinem MySQL zwei InnoDB-Tabelle:
Tabelle Nummer 1: Banner:
ID | Name
1 |Foo
2 |Bar
3 |FooBar
Tabelle Nummer 2: Reload
User | B_ID | (DATETIME) Until
Heinz | 1 | 2009-02-27 20:15:00
Heinz |2 |2008-01-01 19:30:00

Banner:Reload ist logischerweise 1:m
Gehen wir einfach mal davon aus, dass NOW(); 2009-02-27 19:00:00 ist.
->Heinz ist also für Banner 1 im Reload, sein Reload für Banner 2 ist abgelaufen und für 3 hat er keinen Tupel in der Reload-Tabelle

Wie der Titel schon sagt möchte ich "Heinz" jetzt die Banner anzeigen für die er nicht im Reload ist.
Das heißt:
Es gibt keinen Tupel der Heinz und die BannerID aufweisst, oder der Tupel ist abgelaufen -> TIMEDIFF(NOW(),Reload.Until)>0

Meine Datenbankerfahrung ist zwar eingentlich ganz ordentlich, aber ich krieg's einfach nicht hin....

Er hatte ich einen OUTER-Join im Verdacht, aber der wollte nicht.
Ein INNER kommt ja nicht in Frage, weil keine 1:1 Beziehung.

PS:
Um euch Nachschlagarbeit zu TIMEDIFF zu ersparen:

mysql> SELECT TIMEDIFF('2009-02-27 19:00:00','2009-02-27 18:00:00') AS dif;
+----------+
| dif |
+----------+
| 01:00:00 |
+----------+
Mitglied: jakicoll
28.02.2009 um 09:34 Uhr
Gestern Abend um 23:30 machte es endlich klick bei mir!
Eine mögliche Lösung ist:
Eine Subquery die alle Banner rausucht für die Heinz im Reload ist und mit einem NOT IN in der eigentlichen Query ausgewertet wird:
SELECT `name` FROM `banner`
WHERE `id` NOT ( SELECT `b_id` FROM `reload` WHERE `user`="Heinz" AND TIMEDIFF(NOW(), `until`)<1 )
Limit 1;

Edit: Scheint noch ein Fehler während des Datumsvergleiches drin zu sein!
Wenn ich als Subquery folgendes nehme gehts:
SELECT `id`
FROM `reload`
WHERE `user` = 'Heinz'
AND NOW( ) < `reload` ;


Danke trotzdem!

jakicoll
Bitte warten ..
Mitglied: nxclass
28.02.2009 um 10:47 Uhr
warum machst du keinen LEFT JOIN und gibst alle Zeilen zurück wo die Werte der 2. Tabelle IS NULL sind ?

(ggf. sprengst Du dein Speicher- und Time- Limit bei der 'NOT IN (SELECT ...) Abfrage)
Bitte warten ..
Mitglied: jakicoll
28.02.2009 um 20:15 Uhr
Hmm, das mit dem Speicher hab' ich nicht bedacht.
Da in der Banner-Tabelle meistens nur um die 30-40 Einträge sind ist das kein so großes Problem (oder?)

Das mit dem Left Join würde doch nur Funktionieren wenn es für jeden User zu jedem Banner einen Eintrag in der Reload Tabelle geben würde, der wenn er nicht im Reload ist halt auf NULL steht, aber das wäre bei über 100 aktiven Usern nicht ganz so günstig, da die Kampagnen häufig wechseln und dann für jede Kampagne 100 Tupel in der Reload Tabelle angelegt oder gelöscht werden müssten...

Oder täusche ich mich etwa?

Grüße,

Jakicoll
Bitte warten ..
Mitglied: nxclass
01.03.2009 um 10:16 Uhr
Das Speicher Problem ist erstmal zweitrangig - Optimierung ist ja immer erst der 2. Schritt - erstmal muss es gehen.

01.
SELECT b.id 
02.
FROM 
03.
  banner b LEFT JOIN ( 
04.
    SELECT b_id FROM reload 
05.
    WHERE 
06.
      DATE_ADD(until, INTERVAL 1 HOUR) < NOW() AND 
07.
      user_id = ? 
08.
  ) tmp ON b.id = tmp.b_id 
09.
WHERE 
10.
  tmp.b_id IS NULL;
das sollte gehen - und Du sparst dir dieses 'NOT IN' - meine Erfahrung zeigt das es rel. langsam ist und nur bei Konstanten sinn macht.

Der LEFT JOIN gibt alle Einträge aus der 'banner' Tabelle und nur die Eintrage aus der 'reload' Tabelle zurück die die ON Klausel erfüllen, somit sind bei nicht vorhandenen Einträgen, aus der 'reload' Tabelle' NULL Werte eingetragen.
Bitte warten ..
Ähnliche Inhalte
Google Android
Kodi gesehen "Häkchen" mit anderen Geräten Syncronisieren
Frage von GrauerStarGoogle Android4 Kommentare

Hallo Ich hab auf Mehreren Geräten Kodi installiert (Android und Raspberry). Seit mir jemand ein altes NAS mit 2TB ...

E-Mail
SMTP Banner rDNS missmatch
Frage von 101191E-Mail2 Kommentare

Hallo alle miteinander! Wie ich hier im Forum und auch überall im Internet schon gelesen habe, scheint das ja ...

Datenbanken
MySQL - Join
Frage von ThoomaasDatenbanken4 Kommentare

Hallo alle zusammen! Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team ...

Datenbanken
SQL LEFT JOIN in Spalten
gelöst Frage von StfnCstrDatenbanken5 Kommentare

Hallo, ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich habe 2 Tabellen Tabelle 1: PK, Vorname, ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 6 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 6 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 9 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...