MySQL-Query mit Bedingungen

Begonnen von Breaker, 28 Juli 2007, 22:26:41

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Breaker

 Hi zuzsammen smiling smiley

Ich habe hier 2 Tabbellen, in der 1. Stehen Banner (mit Banner-ID, Banner-Art (View/Klick) sowie Sponsor und Reload-Zeiten.
In der 2. Tabelle sind die gleichen Felder + klick-Zeit + User-IP

Jetzt will ich aus der 1. Tabelle nur Banner anzeigen lassen, welche sich nicht in der reload-Sperre befinden (also nicht in der 2. Tabelle vorhanden sind)...nur will es irgendwie nicht klappen, die Reload-Sperre wird nicht beachtet. Das anzeigen der Banner, Errechnen der View und Klickrate sowie in Reload setzen funktioniert, nur das beachten der Sperre nicht.

Dummerweise kenne ich mich mit "INNER JOIN" und "LEFT JOIN" nicht wirklich aus (ich will es aber damit machen, weil es a. eine saubere abfrage wäre, ich mir unnötigen Code spare und es irgendwann auch mal lernen muß grinning smiley

So sieht die Query im Moment aus...vielleicht weiß von euch ja jemand weiter smiling smiley

Danke euch schonmal :)


$sql1=mysql_query("SELECT
ba.kampagnen_id,
ba.kampagnen_werbemittel_id,
ba.kampagnen_name,
ba.kampagnen_reload,
ba.kampagnen_aufenthalt,
ba.kampagnen_url,
ba.kampagnen_url_bild,
ba.kampagnen_art,
ba.kampagnen_sponsor
FROM ".$prefix."_pwc_banner_ads AS ba
LEFT JOIN ".$prefix."_pwc_banner_ads_reload AS re
ON ba.kampagnen_id=re.kampagnen_id
AND ba.kampagnen_sponsor=re.kampagnen_sponsor
AND ba.kampagnen_art=re.kampagnen_art
AND re.kampagnen_klick<='".intval($time)."'
ORDER BY RAND() LIMIT 1
") or die (mysql_error());




Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.

jubilee

Wenn die ID in beiden Tabellen (für den gleichen Datesatz) gleich sind reicht ein Feld zur Verknüfung der beiden Tabellen

Zitat
$sql1=mysql_query("SELECT
ba.kampagnen_id,
ba.kampagnen_werbemittel_id,
ba.kampagnen_name,
ba.kampagnen_reload,
ba.kampagnen_aufenthalt,
ba.kampagnen_url,
ba.kampagnen_url_bild,
ba.kampagnen_art,
ba.kampagnen_sponsor
FROM
".$prefix."_pwc_banner_ads AS ba
LEFT JOIN
".$prefix."_pwc_banner_ads_reload AS re
ON
ba.kampagnen_id=re.kampagnen_id
WHERE
re.kampagnen_klick<='".intval($time)."'
ORDER BY RAND() LIMIT 1
") or die (mysql_error());

Was steht denn genau in $time drinne ?

Breaker

So, ich bin ein Stückchen weiter :

Zitat
            $sql1=mysql_query("SELECT
               kampagnen_id,
               kampagnen_werbemittel_id,
               kampagnen_name,
               kampagnen_reload,
               kampagnen_aufenthalt,
               kampagnen_url,
               kampagnen_url_bild,
               kampagnen_art,
               kampagnen_sponsor
            FROM ".$prefix."_pwc_banner_ads
               WHERE ".$prefix."_pwc_banner_ads.kampagnen_id
               NOT IN (SELECT ".$prefix."_pwc_banner_ads_reload.kampagnen_id FROM ".$prefix."_pwc_banner_ads_reload)
               AND kampagnen_art = '1'
               AND kampagnen_status = '1'
               ORDER BY RAND() LIMIT 1
            ") or die (mysql_error());

Jetzt werden die Banner, welche sich in der Reload-Sperre befinden (also in der reload-Tabelle) nichtmehr angezeigt, allerdings kann es vorkommen, das 2 Sponsoren 1 Banner-ID besitzen, demnach würden beide Banner nicht angezeigt, eine weitere Bedingung müsste die IP und Sponsor sein....nur bin ich da total überfragt, wenn ich jetzt eine weitere Bedingung einbaue, funktionier nichtsmehr

$time ist time(); (Wird für die Reload-Sperre benötigt ;) )

$time=time();
$reload_sperre=($kampagnen_reload*3600)+$time;
Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.

jubilee

Zitatallerdings kann es vorkommen, das 2 Sponsoren 1 Banner-ID besitzen, demnach würden beide Banner nicht angezeigt

Nach der Abfrage die Du zuletzt gepostet hast, dürfte das allerdings nicht passieren.
Hier werden ALLE Baner angezeigt, die nicht in der 2. Tabelle vorkommen. Egal wie oft der Banner auftaucht.
Ich denke das Problem ist, das in der Tabelle gleiche Banner mehrmals auftauchen, weil Du mehrere Sponsoren für ein Event haben kannst. Diese werden dann auch mehrmals gelistet (bei dieser Abfrage).
Sinnvoll wäre es hier um redundante Daten zu vermeiden, die Sponsoren in eine eigene Tabelle auszulagern.

Breaker

#4
Richtig, genauso war es auch, allerdings habe ich dann testweise mal alle Banner angeklickt und muste feststellen, das die Banenr für alle Gäste in der reload-Sperre sind ;)

Ich habe das ganze jetzt mit PKs gelöst :)

Diese Möglichkeit beachtet nicht nur die ID, Sponsor usw, sondern auch die IP und die Reload-Zeit :)

(kampagnen_id, kampagnen_werbemittel_id, kampagnen_art und kampagnen_sponsor haben in der Banner und Reload-Tabelle den "Primary Key")

Zitat

            $sql1=mysql_query("SELECT
               kampagnen_id,
               kampagnen_werbemittel_id,
               kampagnen_name,
               kampagnen_reload,
               kampagnen_aufenthalt,
               kampagnen_url,
               kampagnen_url_bild,
               kampagnen_art,
               kampagnen_sponsor
            FROM ".$prefix."_pwc_banner_ads ba
               WHERE 0 = (SELECT COUNT(*) FROM ".$prefix."_pwc_banner_ads_reload re
                  WHERE ba.kampagnen_id = re.kampagnen_id
                  AND ba.kampagnen_werbemittel_id = re.kampagnen_werbemittel_id
                  AND ba.kampagnen_art = re.kampagnen_art
                  AND ba.kampagnen_sponsor = re.kampagnen_sponsor
                  AND re.kampagnen_ip = '".addslashes(htmlspecialchars($user_ip))."'
                  AND re.kampagnen_klick >= '$time'
               )
               AND ba.kampagnen_art = 1
               AND ba.kampagnen_status = 1
               ORDER BY RAND() LIMIT 1
            ");
Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.