Select Multiple in DB

  • Guten Tag,


    ich habe eine Tabelle in meiner DB namens Städte. Ich kann per Select mehrere Städte auswählen und so ist dann mein Value z.b: "Berlin,Hannover,Hamburg".


    Wenn ich es in der DB jetzt einfüge wäre es so:


    id | city

    1 | Berlin,Hannover,Hamburg


    Ich möchte aber in meiner DB immer einzelne Städte speichern lassen die der Nutzer alle ausgewählt hat. z.b so:


    id | city

    1 | berlin

    2 | hannover

    3 | hamburg


    Wie funktioniert sowas?


    So ist bisher mein Code


    HTML


    JS


    PHP (Ich hab jetzt mal den SQL Befehl usw weggelassen)

  • Ungetestet:

    Code
    $cities = array();
    
    foreach ($_POST['cities'] as $city)
       $cities[] = "'$city'";
       
    $query = "Select `dies`, 
                     `das`, 
                     `jenes` 
                from `tabelle` 
                where `city` in (" . implode(',', $cities) . ")";


    Danke für die Hilfe erstmal,


    also er gibt mir keine Stadt aus. Hab mal var_dump($query) gemacht und bekam dies hier:


    string(87) "Select `city` from `dataset` where `city` in ('78267','52062')"

  • Das sind doch vermutlich Postleitzahlen, dann kann die Suche in der Tabellenspalte city ja auch nicht funktionieren.


    Wie sieht deine Tabelle genau aus?


    Ups hab ausversehen PLZ genommen, habs aber auch mit den Namen Versucht:


    string(90) "Select `city` from `dataset` where `city` in ('Berlin','Hamburg')"


    Wenn ich $row['city'] mache bekomme ich nur Berlin angezeigt.


    Wenn ich es mit while mache zeigt er mir mindestens 100x die Stadt Berlin an.

  • Zeige mal das aktuelle Formular und den aktuellen PHP-Teil

    PHP


    JS:

  • Was kommt dabei raus:

  • Was kommt dabei raus:


    Das hier:


    Der code geht noch länger hab aber nur bisschen kopiert.


    Aber glaube habe mich falsch ausgedrückt oder du hast mich falsch verstanden^^


    ich wollte es so haben z.b


    $city = Berlin,Hamburg


    So


    Jetzt will ich 2x ein Insert durchführen da 2 städte ausgewählt sind:


    $insert = $pdo->prepare("INSERT INTO ´city` (city) VALUES (:city);");

    $insert->BindValue('city', $city) (SOllte jetzt berlin sein)

    $insert->execute();



    $insert = $pdo->prepare("INSERT INTO ´city` (city) VALUES (:city);");

    $insert->BindValue('city', $city) (Sollte jetzt Hamburg sein)

    $insert->execute();


    Wenn ich 3 Städte auswähle soll er 3x ein Insert machen. Ist das möglich?

  • ungetestet:

    PHP
    $aCitiesValues = array_map(
            function ( $city ) {
                return "('" . $city . "')";
            }
            , explode( ',', $_POST['city'] )
        );
    
    
    $oStmnt = $oPDO->prepare( 'insert into `city` (`city`) values ?' );
    $oStmnt->execute( [implode(',', $aCitiesValues)] );
  • ungetestet:

    PHP
    $aCitiesValues = array_map(
            function ( $city ) {
                return "('" . $city . "')";
            }
            , explode( ',', $_POST['city'] )
        );
    
    
    $oStmnt = $oPDO->prepare( 'insert into `city` (`city`) values ?' );
    $oStmnt->execute( [implode(',', $aCitiesValues)] );

    Hi,


    bekomme diese 2 Sachen ausgegeben wenn ich var_dump(implode(',', $aCitiesValues)) und var_dump($0Stmnt) eingebe


    string(4) "('')"


    object(PDOStatement)#2 (1) { ["queryString"]=> string(49) "insert into `follow_cities` (`cities`) values (?)" }

  • Code
    "INSERT INTO `city` (`city`) VALUES (?) (?) (?);"

    http://sandbox.onlinephpfuncti…9c90a14fa22e770684908cb7c


    Wieso bekomm ich diesen Fehler?


    Mein Code ist genau gleich außer das ich $_POST['city'] mit $data getauscht habe.



    Var_dump($sql)

  • Ich hab das Komma vergessen :D

    Opps :D

    SQL
    INSERT INTO `city` (`city`) VALUES (?), (?), (?);


    http://sandbox.onlinephpfuncti…91bcde0ea49c75a05981f7574

  • Ich hab das Komma vergessen :D

    Opps :D

    SQL
    INSERT INTO `city` (`city`) VALUES (?), (?), (?);


    http://sandbox.onlinephpfuncti…91bcde0ea49c75a05981f7574


    Hat perfekt geklappt danke dir^^. Kurze Frage noch, wenn ich mehrere Paramter einfügen möchte wie z.b die User_id noch, wie sollte es dann aussehen?


    PHP
    $params[] = $city;
    $params[] = $_SESSION['id']
    $values[] = "(?)";

    Finde es etwas kompliziert grade<.<

  • Nein. Dann würdest Du mehr Parameter übergeben, als Du Platzhalter angegeben hast.

    Das führt dann (zum Glück) zu einem Fehler (also Abbruch).


    Das hier könnte man dann machen:


    Oder (wenn es nicht auf Geschwindigkeit ankommt) man baut das Ganze dann übersichtlicher

    damit andere und man selbst später noch durchsieht

    PHP
    $data = [
        ['country' => 'DE', 'city' => 'Berlin'],
        ['country' => 'DE', 'city' => 'Dresden'],
        ['country' => 'DE', 'city' => 'München'],
    ];
    foreach ($data as $array) {
        $sql = "INSERT INTO `table_name` SET `country` = :country, `city` = :city;";
        $stmt = $pdo->prepare($sql);
        $stmt->execute($array);   
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!