Anzeige:
Ergebnis 1 bis 6 von 6

Thema: result Variablen von SQL verbinden

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.03.2008
    Beiträge
    128

    result Variablen von SQL verbinden

    Hallo zusammen,

    ich sitze hier vor einem SQL-Problem und würde es gerne elegant lösen.
    Es geht darum 3 Abfragen zu machen, und wenn jeweils eine Abfrage leer ist eine andere Abfrage zu machen. D.h. UNION funktioniert nicht, da man hier ja eben nicht leere Teilmengen abfangen kann (oder doch?)

    Im Moment würde der Code dann so aussehen:
    Abfrage 1 - IF-Teil-Abfrage 1
    Ausgabe Abfrage
    Abfrage 2 - IF-Teil-Abfrage 2
    Ausgabe Abfrage
    Abfrage 3 - IF-Teil-Abfrage 3
    Ausgabe Abfrage

    Wobei Ausgabe der Abfrage immer der gleiche Code ist. Das wird natürlich extrem unschön, wenn die Ausgabe der Abfrage 50 Zeilen sind :-)

    Was ich nun suche ist Folgendes:
    Code:
    // Abfrage 1
    $sql = select ...
    $result1 = mysql_query($sql, $db);
    if (!$result) $sql = select andere Abfrage;
    // Abfrage 2
    $sql = select ...
    $result2 = mysql_query($sql, $db);
    if (!$result2) $sql = select andere Abfrage;
    // Abfrage 3
    $sql = select ...
    $result3 = mysql_query($sql, $db);
    if (!$result3) $sql = select andere Abfrage;
    // Zusammenfuehren:
    $result = $result1.$result2.$result3
    // Ausgeben
    while ($myrow = mysql_fetch_array($result) {
    ...
    }
    Leider funktioniert das so nicht. Gibt es irgendwie eine Append-Row-Funktion in PHP? Mit SQL-Mitteln laesst sich die Abfrage leider wirklich nicht hinbiegen!

    Natuerlich ist die Anzahl und Bezeichnung der Felder gleich!
    Geändert von vci (28-01-2010 um 11:05 Uhr)

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Solche Probleme löst man mit SQL JOIN Syntax und nicht mit PHP
    An sonsten hilft nur die neue $pdo->mysql, die kann mit Prozedural Syntax umgehen.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.03.2008
    Beiträge
    128
    Also ich denke nicht, dass das Problem sich mit einer SQL-Abfrage erschlagen lässt. Das Problem ist eben nicht die Abfrage als solches zu Verknüpfen, sondern im "Fehlerfall" dann eine andere Abfrage zu machen.

    Konkret soll es darum gehen, dass immer mehrere Werte eines Eintrages ausgegeben werden wenn der Eintrag > aktuelles Datum ist. Ist dieser Eintrag nicht vorhanden soll eine 2. Abfrage gemacht werden die den 1. Eintrag < aktuelles Datum zurückliefert.

    Also eben:
    select name,ort,adresse,mail from events where datum > curdate();
    if empty: select name,ort,adresse,mail from events where datum < curdate();

    Es handelt sich dabei um Veranstaltungen. So soll z.B.:
    SchokoladenKonferenz Mai 2008
    SchokoladenKonferenz Oktober 2009
    SchokoladenKonferenz Juli 2010
    SchokoladenKonferenz Juni 2011

    Beispiele:
    Sind wir im Juni 2008 soll die Konferenz von Oktober 2009 ausgegeben werden. Sind wir im Oktober 2011 und ein neuer Eintrag für 2012 existiert noch nicht, soll die Konferenz von 2011 ausgegeben werden (das wäre der Sonderfall, wenn die 1. Abfrage leer ist).

    Dabei geht es nicht nur um SchokoladenKonferenz sondern zusätzlich noch um PralinenKonferenz und EisKonferenz. #Edit: Es sollen also immer *genau* die 3 "richtigen" Konferenzen ausgegeben werden und nicht mehr und nicht weniger :-)

    Wie soll das mit JOIN funktionieren?!
    Bin total ratlos und zugegeben auch PHP/SQL Neuling :-)
    Geändert von vci (28-01-2010 um 11:45 Uhr)

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Aber hallo, natürlich ist das ein reines SQL Problem
    Das fängt schon beim SQL Modell an.
    Ich nehme jetzt mal an das du für jedes Event / Konferenz Type, wie auch immer eine Extra Tabelle machst. Das heißt für mich du brauchst Eigentlich eine Referenz Tabelle.
    Notfalls kannst du das auch so machen. (Nicht getestet frei...)
    Code:
    START TRANSACTION;
    SET @current := NOW();
    SET @stamp := DATE_ADD(@current, Interval 3 month );
    SELECT DISTINCT ROW
    	a.*, b.*, c.*
    FROM tabelle_a AS a
    LEFT JOIN tabelle_b AS b
    LEFT JOIN tabelle_c AS c
    WHERE (
    	( a.datum > @current AND a.datum < @stamp ) 
     OR  ( b.datum > @current AND b.datum < @stamp ) 
     OR  ( c.datum > @current  AND c.datum < @stamp ) 
    )
    ORDER BY a.datum, b.datum, c.datum ASC LIMIT 3;
    COMMIT;
    Die SQL wird bei den ersten 3 treffern beendet.
    Geändert von undefined (28-01-2010 um 13:37 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.03.2008
    Beiträge
    128
    Ne das ist leider alles eine Tabelle (Vorgabe, kann ich nicht aendern).
    D.h. die Abfrage ist immer ein: where category='Konferenz.Schokolade' ...

  6. #6
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Um so einfacher, dann kannst du dir den JOIN Syntax sparen und über WHERE Klausel arbeiten.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •