Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei Select mit Mehrfachbedingungen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei Select mit Mehrfachbedingungen

    Hallo guten Abend,
    ich hoffe, ich bekomme hier eine Anregung, wie ich mein angefangenes Script zu Ende bringen kann:
    Vorhaben:
    ich will auf dieser Seite die in einer Datenbank gespeicherten Veranstaltungen nach definierten Kriterien veröffentlichen, die da wären:
    öffentlich und
    ab aktuellem Datum (beide Kriterien gelten immer) sowie
    Veranstaltungsort und
    Zielgruppe(n) (sind variable Kriterien)
    IST-Stand:
    - die variablen Kriterien bekomme ich per POST richtig übermittelt
    bei den Zielgruppen sind mehrere Nennungen möglich, hier erhalte ich die jeweilige ID
    beim Seminarort wird die Stadt übermittelt (für eine Stadt sind verschiedene Adressen hinterlegt)
    - es werden alle Veranstaltungen angezeigt, die nach den immer geltenden Kritierien (öffentlich/ab aktuellem Datum) selektiert wurden
    Problem/Frage
    ich bin davon ausgegangen, die beiden flexiblen Kriterien (Ort und Zielgruppe) gehören ebenfalls in die Where-Bedingung - nach meinem Verständnis ist das doch zumindest beim Ort ein einfaches Auslesen der Datenbank oder?
    Bei den Zielgruppen wird es schon "komplizierter", weil die zugelassenen Zielgruppen für eine Veranstaltung per ID zusammen mit der Veranstaltungs-ID in einer separaten Tabelle gespeichert sind

    Ich habe erst einmal angefangen, das Script um die Auswahl nach Ort zu erweitern - weder mit AND noch so `ort` = ".$_POST["ort"]." habe ich es geschafft die Veranstaltungen entsprechend zu selektieren.

    Wo muss ich die Bedingungen (Auswahl nach Ort und Zielgruppe/n ) unterbringen, um diese beiden Auswahlkriterien auch erfolgreich in meine Abfrage integrieren zu können und könnt Ihr mir bitte auch erklären, warum wieso weshalb?
    Vorab schon einmal Danke für Eure Hilfe Marie


    PHP-Code:

    if(isset($_POST["sem_ort"]) && isset($_POST["zielgruppe"])){ 
        
        
    //Variable definieren
        
    $ort $_POST["sem_ort"]; 
        
    $zielgruppe $_POST[zielgruppe];
        
      }
       
           
    //Veranstaltungen auswählen
        
    $sql "SELECT 
                        v.id, v.titel, v.untertitel, v.beschreibung, v.kosten, 
                         DATE_FORMAT(v.start_datum,\"%d.%m.%Y\") AS start, 
                         DATE_FORMAT(v.end_datum,\"%d.%m.%Y\") AS ende, 
                 v.start_zeit AS s_zeit, v.end_zeit AS e_zeit,
                         v.image, o.name AS o_name,o.ort as ort
            FROM  `veranstaltungen` v
            LEFT JOIN orte o ON orte_id = o.id
            WHERE 
                      `oeffentlich` = 1   AND 
                      (v.start_datum >= CURDATE()) 
             ORDER BY v.start_datum LIMIT 20"
    ;
         
    $result mysql_query($sql) ;
       } 


  • #2
    Hallo,

    kannst du ein paar Informationen zur Struktur der Datenbank posten? Eine Beschreibung der Tabellen in folgender Form würde schon reichen:
    Tabelle: User
    Spalten: UserID (int, auto increment, primary key), Vorname (varchar), Nachname (varchar)

    Zu den Abfragekriterien
    Klar sind:
    oeffentlich = 1
    datum >= CURDATE()

    Die Unklarheiten:
    weder mit AND noch so `ort` = ".$_POST["ort"]." habe ich es geschafft die Veranstaltungen entsprechend zu selektieren.
    AND ist richtig, bei der Angabe des Suchbegriffs fehlen die die Anführungszeichen, die mysql signalisieren, dass da ein String kommt.

    bei den Zielgruppen sind mehrere Nennungen möglich, hier erhalte ich die jeweilige ID
    Heißt du bekommst ein Array mit den Zielgruppen-IDs? Dann kannst du daraus einen Komma-separierten String machen und in der Where-Klausel deiner Abfrage mit IN() arbeiten.


    Standardtext für die Datenbankverbindung:
    Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt.
    Durch einen Wechsel auf mysqli_* oder PDO greifst du auf die modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections schützen.
    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Vorab erst einmal vielen Dank für Deine schnelle Rückmeldung.
      Zur Struktur der Datenbank:
      ich nehme an Du meintest die Tabelle mit den Veranstaltungen (nicht User?)?
      Die Tabelle "veranstaltungen" umfasst 24 Spalten - die für meinen Zweck relevanten habe ich
      `id` = int(11) / AUTO_INCREMENT
      `orte_id` = int(11)
      `zielgruppen_id` = int(11)
      `titel` = varchar(150) utf8_general_ci
      `untertitel` = text utf8_general_ci
      `oeffentlich` = tinyint(1)
      `start_datum` = date
      ....

      Die Tabelle "orte" umfasst 09 Spalten listet die Adressen auf nach dem Prinzip
      `id` = int(11) / AUTO_INCREMENT
      `name` = varchar(150) utf8_general_ci
      `strasse` = varchar(150) utf8_general_ci

      Die Tabelle "zielgruppe" umfasst 02 Spalten
      `id` = int(11) / AUTO_INCREMENT
      `name` = varchar(150) utf8_general_ci


      Die Unklarheiten:
      Zitat:
      weder mit AND noch so `ort` = ".$_POST["ort"]." habe ich es geschafft die Veranstaltungen entsprechend zu selektieren.
      AND ist richtig, bei der Angabe des Suchbegriffs fehlen die die Anführungszeichen, die mysql signalisieren, dass da ein String kommt.
      Angabe des Suchbegriffs ist "Ort" wäre diese WHERE-Bedingung in Verbindung mit den bereits vorhandenen Kriterien dann so korrekt?:
      AND "ort" = ".$_POST["ort"]."
      Frage: darf ich unendlich viele Abfrage-Bedingungen definieren und werden diese immer! mit AND verbunden?

      bei den Zielgruppen sind mehrere Nennungen möglich, hier erhalte ich die jeweilige ID
      Heißt du bekommst ein Array mit den Zielgruppen-IDs? Dann kannst du daraus einen Komma-separierten String machen und in der Where-Klausel deiner Abfrage mit IN() arbeiten.
      Ja (ARRAYmit Zielgruppen-ID's) - siehe nachfolgenden PHP-Code
      wenn ich das mit dem "Komma-separiertem String" nachlesen will, kannst Du mir treffende Schlüsselwörter nennen (habe eben beim schnellen Überfliegen von Googleergebnissen nichts Selbsterklärendes gefunden
      PHP-Code:
      if(isset($_POST["sem_ort"]) && isset($_POST["zielgruppe"])){ 
          
      $ort $_POST["sem_ort"]; 
          
      //Daten aus dem Array empfangen und in Variable legen
          
      $zielgruppe $_POST[zielgruppe];
          
          
      //alle Daten ausgeben / verarbeiten
          
      foreach ($zielgruppe as $id){
          
          
      //Ausgabe ID Zielgruppe - werden auch tatsächlich ausgegeben :-)
          
      echo '<td>',$id,'</td>';
        } 

      was das mysqli betrifft, ich bin beim Lesen auf entsprechenden Seiten schon darauf gestossen, habe mich aber noch nicht ausgiebig damit beschäftigt
      Reicht das an Infos? Muss mich jetzt leider erst mal ausloggen (habe morgen einen anstrengenden Tag vor mir) und kaum vor morgen Abend wieder vor meinem Problem sitzen (aber lesen werde ich die Beiträge zwischendurch
      Besten Dank Marie

      Kommentar


      • #4
        Angabe des Suchbegriffs ist "Ort" wäre diese WHERE-Bedingung in Verbindung mit den bereits vorhandenen Kriterien dann so korrekt?:
        AND "ort" = ".$_POST["ort"]."
        Die Quotes sind falsch. `ort` war richtig. Um ".$_POST["ort"]." müssen noch Anführungszeichen.

        wenn ich das mit dem "Komma-separiertem String [...]"
        War vielleicht bisschen blöd formuliert. Du könntest die PHP-Funktion implode() nutzen, oder über eine Schleife die Werte aneinanderhängen. http://php.net/manual/de/function.implode.php

        Damit solltest du eigentlich schon weiterkommen, kannst ja sonst deinen nächsten Versuch posten.
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          Hallo,
          das Problem mit der Selektion nach "ort" habe ich nun so gelöst.

          PHP-Code:
          WHERE `oeffentlich` = AND `ort` = '".$ort."'  AND (v.start_datum >= CURDATE()) ORDER BY v.start_datum LIMIT 20"; 
          Vielen Dank für Deine Hilfe.

          Kommentar

          Lädt...
          X