[PHP/MySQL] Abfrage über 2 tabellen

HamburgerJungx

Well-known member
ID: 465838
L
28 April 2006
848
39
Ich habe da ein Problem.
Ich möchte eine Abfrage aus 2 Tabellen machen wo es kein gemeinsames Feld gibt.

Code:
$v1 = $db->query("SELECT equinox_1_kampagnen.kampagnen_id,
equinox_1_kampagnen.in_clicks,
equinox_1_kampagnen.do_clicks,
equinox_1_kampagnen.name,
equinox_1_kampagnen.text_mail,
equinox_1_kampagnen.bemerkung 
FROM equinox_1_kampagnen,equinox_1_crons 
WHERE
equinox_1_crons.cron LIKE '%- ".$tag_alt_pmail." -%'
AND equinox_1_kampagnen.format = 'paidmails' 
AND equinox_1_kampagnen.status = '1' 
ORDER BY equinox_1_kampagnen.payout DESC");

Es funktioniert alles soweit, nur folgende Bedingung wird nicht berücksichtigt.

Code:
equinox_1_crons.cron LIKE '%- ".$tag_alt_pmail." -%'

Die variable hat auch den richtigen Wert und in der angegeben Tabelle ist auch alles richtig eingetragen.

Wäre nett, wenn mir jemand sagen könnte was ich falsch gemacht habe.
 
Wäre nett, wenn mir jemand sagen könnte was ich falsch gemacht habe.
Zum Ersten hast du dich nicht an die Regeln gehalten, was Threadtitelsyntax angeht. Das habe ich inzwischen korrigiert.

Zum Problem:
Es funktioniert alles soweit, nur folgende Bedingung wird nicht berücksichtigt.
Was soll diese Bedingung denn ? Du selektierst kein Feld aus der Tabelle, also wird es ignoriert. Eigentlich logisch.

"Zähle mir alle Zahlen auf. Bei den Buchstaben hätte ich aber gerne nur die Vokale." - Du willst nur Zahlen, also wirst du keine Konsonanten bekommen, da diese Buchstaben sind und du diese nicht haben willst.
Mal so als vergleichbares Beispiel, um dir das näher zu bringen.
 
Sorry wegen des Threadtitels.

Hab ich dich richtig verstanden, das ich das Feld aus der 2. Tabelle wählen muß um einen Wert zu erhalten?
Dann müßte das so aussehen:

Code:
$v1 = $db->query("SELECT 
equinox_1_kampagnen.kampagnen_id, 
equinox_1_kampagnen.in_clicks, 
equinox_1_kampagnen.do_clicks, 
equinox_1_kampagnen.name, 
equinox_1_kampagnen.text_mail, 
equinox_1_kampagnen.bemerkung,
equinox_1_crons.cron AS search
FROM 
equinox_1_kampagnen,equinox_1_crons 
WHERE 
search LIKE '%- ".$tag_alt_pmail." -%' AND 
equinox_1_kampagnen.format = 'paidmails' AND 
equinox_1_kampagnen.status = '1' 
ORDER BY equinox_1_kampagnen.payout DESC");
 
Da könntest du ein Ergebnis erhalten, aber wahrscheinlich nicht das erwartete. Denn afair tut MySQL dann jeden Datensatz der 1. Tabelle mit jedem der 2. Tabelle kombinieren, da du ja keine Verknüpfungsbedingung angegeben hast. Was willst du mir der Abfrage überhaupt erreichen?
 
Wieso verbindet man zwei Tabellen, die kein gemeinsames Feld haben? Hier scheint am Datenbankentwurf etwas nicht zu stimmen.
Grundsätzlich stimme ich dir zu. ist schon eine kuriosität, aber man könnte sich dch mit einem LEFT JOIN aneinanderknüpfen.
solange die gespeicherten daten immer so ausfallen das das kein chaos gibt sollte es doch klappen..

bescheidener vorschlag:

Code:
$v1 = $db->query("SELECT 
equinox_1_kampagnen.kampagnen_id, 
equinox_1_kampagnen.in_clicks, 
equinox_1_kampagnen.do_clicks, 
equinox_1_kampagnen.name, 
equinox_1_kampagnen.text_mail, 
equinox_1_kampagnen.bemerkung,
equinox_1_crons.cron AS search
FROM 
equinox_1_crons LEFT JOIN equinox_1_kampagnen
WHERE 
search LIKE '%- ".$tag_alt_pmail." -%' AND 
equinox_1_kampagnen.format = 'paidmails' AND 
equinox_1_kampagnen.status = '1' 
ORDER BY equinox_1_kampagnen.payout DESC");
hoff ich hab da kein mist gemacht.. der kaffee rödelt noch :yawn:
 
Zuletzt bearbeitet:
Was willst du mir der Abfrage überhaupt erreichen?

Also was ich will ist folgendes:

In der Tabelle equinox_1_kampagnen werden die einzelnen Mailkampagnen gespeichert. In der equinox_1_crons sind die Mailcrons die die Kampagnen einlesen. Pro Tag werden aber nur eine Hälfte der Crons abgearbeitet und am nächsten Tag der Rest. Nun möchte ich das beim versenden der Mails immer nur die für diesen Tag aktuell eingelesenen Kampagnen auch verschickt werden und nicht die anderen.
Das Problem ist, das in der Kampagnentabelle nicht ersichtlich ist, welche Kampagnen wann eingelesen wurden. Somit brauche ich einen Vergleich zwischen 2 Feldern aus den beiden Tabellen.


Ich habe jetzt schon eine Lösung gefunden. Sie war zwar mit mehr Arbeit verbunden, aber es geht.
Trotzdem möchte ich gerne wissen wie die Lösung ausgesehen hätte.

Vielleicht ist MrToiz so frei mir den Lösungsweg aufzuzeigen. Wenn er ihn denn weiß.
 
Wie ist den die Tabelle crons aufgebaut? Was steht da drin?

Vielleicht ist die Lösung eine dritte Tabelle, die zu jedem Mailcron auflistet, wann er welche Kampagne zuletzt verschickt hat. Also die m:n-Beziehung auflöst.
(Oder hab ich hier was völlig falsch verstanden?)
 
Nene, hast du schon richtig verstanden, ich wollte nur alles in einer ABfrage schaffen ohne die Struktur der Datenbank zu verändern.