Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit WHERE bei SELECT-Abfrage

Einklappen

Neue Werbung 2019

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

  • Problem mit WHERE bei SELECT-Abfrage

    Hi

    Habe eine Variable $forschung_erm_for die aus der Datenbank geladen wurde.
    print_r($forschung_erm_for) gibt folgendes aus
    Scout;Eistransport;Systrans1 (Systemtransporter Klasse1);Lionheart (Korvette);Slayer (Zerstörer);grosse Schiffsrümpfe
    Diese wird zerteilt und bei der WHERE eingesetzt werden.

    Hier der Code

    PHP-Code:
    $trennen explode (";"$forschung_erm_for);
    $anzahl sizeof($trennen);
    for(
    $i=0$i<$anzahl$i++)
        {
        
    $forschung $trennen[$i];
        
    $pos strpos($forschung"(");
        if (
    $pos === false)
            {
            
    print_r($forschung);
            
    $sql "SELECT    forschungsid, forschungsinfo FROM forschungen WHERE forschungsinfo = '$forschung'";
            }
        else
            {
            
    $forschung explode ("("$forschung);
            
    $forschung $forschung[0];
            
    print_r($forschung);
            echo 
    "
    "
    ;
            
    $sql "SELECT    forschungsid, forschungsinfo FROM forschungen WHERE forschungsinfo LIKE '%".$forschung."%'";
            }
        
    $result $db->sql_query($sql);
        while (
    $row_int $db->sql_fetchrow($result))
            {
            
    $id =  $row_int['forschungsid'];
            echo
    ", gefunden
    "
    ;
            }
        } 
    Die Datenbank schau so aus

    CREATE TABLE `forschungen` (
    `forschungsid` int(11) unsigned NOT NULL auto_increment,
    `forschungsinfo` varchar(255) collate latin1_general_ci NOT NULL,
    ...
    )

    INSERT INTO `forschungen` VALUES (1, 'Raumschiffchassis', ... );
    INSERT INTO `forschungen` VALUES (2, 'Scout', ... );
    INSERT INTO `forschungen` VALUES (3, 'Eistransport', ... );
    INSERT INTO `forschungen` VALUES (4, 'Systrans1 (Systemtransporter Klasse1)', ... );
    ...
    Während er die Schleife durchläuft gibt er folgendes aus
    Scout, gefunden
    Eistransport, gefunden
    Systrans1
    Lionheart
    Slayer
    grosse Schiffsrümpfe, gefunden
    Solange keine Klammer in $forschung vorgekommen ist hat der das auch gemacht nur mit den Klammern wollte er einfach nicht.
    Hab es dann so umgeschrieben, dass die Klammern nicht mehr in $forschung vorkommen und die Abfrage mit LIKE abgeändert. Aber gebracht hat es auch nix.

    Hab keine Ahnung warum der das nicht macht. Wenn mir einer bei meinem Problem helfen könnte wär ich ihm sehr dankbar.

    Adonis

  • #2
    SQL-Abfragen in Schleifen sind Kacke *dampf*
    Letztlich möchtest du doch:
    SELECT .. FROM .. WHERE forschungsinfo = '$trennen[0]' OR foschungsinfo = '$trennen[1]' ...

    Dann bau das doch auch damit:
    PHP-Code:
    <?php
    $where 
    str_replace(";""' OR forschungsinfo = '"$forschung_erm_for);
    $where "forschungsinfo = '" $where "'"// beachte "' = " ', am besten copy&paste
    // ..
    $sql "SELECT * FROM forschungen WHERE $where";
    $res mysql_query($sql) or die("Error using mysql_query($sql): ".mysql_error());
    while (
    $row mysql_fetch_assoc($res)) {
      echo 
    '<pre>'print_r($rowtrue), '</pre>';
    }
    ?>

    Außerdem: Was bringt dir LIKE? Offenbar sind die mit ; getrennten Werte doch exakt die, die in "forschungsinfo" vorkommen. Was soll LIKE da noch bringen?

    Kommentar


    • #3
      Danke erstmal für die schnelle Antwort

      Das LIKE habe ich benutzt, da der mit trotz der exakten Werte bei den Werten mit Klammer nix ausgegeben hat.

      Bei deinem Vorschlag gibt der mir folgendes aus

      Array
      (
      [forschungsid] => 2
      [forschungsinfo] => Scout
      [gebiet] => Prototypen
      [kosten] => 9600 Forschungspunkte Eisen: 150 Stahl: 375 chem. Elem.: 375 Energie: 750
      [vorraus_forschung] => (Raumschiffchassis)
      [vorraus_gebaeude] =>
      [vorraus_objekt] =>
      [erm_forschung] =>
      [erm_gebaeude] =>
      [erm_gebaeudestufe] =>
      [erm_deklaration] =>
      [erm_verteidigung] =>
      [erm_genetik] =>
      [time] => 1146731785
      )

      Array
      (
      [forschungsid] => 3
      [forschungsinfo] => Eistransport
      [gebiet] => Raumfahrt
      [kosten] => 9600 Forschungspunkte Eis: 500
      [vorraus_forschung] => (Raumschiffchassis)
      [vorraus_gebaeude] =>
      [vorraus_objekt] =>
      [erm_forschung] => Crux (Systemtransporter Kolonisten); Lurch (Systemtransporter Klasse 2); KIS-01 (Systemkolonieschiff)
      [erm_gebaeude] =>
      [erm_gebaeudestufe] =>
      [erm_deklaration] =>
      [erm_verteidigung] =>
      [erm_genetik] =>
      [time] => 1146731795
      )

      Array
      (
      [forschungsid] => 7
      [forschungsinfo] => grosse Schiffsrümpfe
      [gebiet] => Raumfahrt
      [kosten] => 60000 Forschungspunkte
      [vorraus_forschung] => (chemischer Hyperraumantrieb) (Ballistische Panzerung) (Raumschiffchassis)
      [vorraus_gebaeude] =>
      [vorraus_objekt] =>
      [erm_forschung] => Gorgol 9 (Hyperraumtransporter Klasse1); Kolpor (Hyperraumtransporter Kolonisten); Eisbär (Hyperraumtransporter Klasse 2); INS-03A (interstellares Kolonieschiff); Pflaumenmus (Carrier); Miniaturisierung; Hitman (Kreuzer); kleine Lebenserhaltungssysteme; sehr grosse Schiffsrümpfe
      [erm_gebaeude] => (mittlere planetare Werft)
      [erm_gebaeudestufe] =>
      [erm_deklaration] =>
      [erm_verteidigung] =>
      [erm_genetik] =>
      [time] => 1146731834
      )
      Die mit der forschungsid 4,5 und 6 gibt der mir auch nicht aus und das sind genau die die der bei mir auch verschluckt.

      Edit:

      Hab mir mal mit deinem Code den Array ausgegeben woher ich die $forschung_erm_for hab

      Array
      (
      [forschungsid] => 1
      [forschungsinfo] => Raumschiffchassis
      [gebiet] => Raumfahrt
      [kosten] => 6000 Forschungspunkte
      [vorraus_forschung] => (Raumfahrt)
      [vorraus_gebaeude] =>
      [vorraus_objekt] =>
      [erm_forschung] => Scout;Eistransport;Systrans1 (Systemtransporter Klasse1);Lionheart (Korvette);Slayer (Zerstörer);grosse Schiffsrümpfe
      [erm_gebaeude] =>
      [erm_gebaeudestufe] =>
      [erm_deklaration] =>
      [erm_verteidigung] =>
      [erm_genetik] =>
      [time] => 1146732803
      )
      Und da sind bei [erm_forschung] immer zwei Leerzeichen oder ein Tabulator zwischen Systrans und (...). Bei der [forschungsinfo] ist nur eins da.

      Kommentar


      • #4
        Lass dir mal dein $sql ausgeben...

        Kommentar


        • #5
          Hab bei $where alles Whitespace durch Leerzeichen ersetzt

          $where = preg_replace("/\s+/", " ", $where);

          und nun klappt es

          Danke nochmal

          Kommentar


          • #6
            http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

            in die Datenbank sollten eigentlich nur atomare Werte, bei erm_forschung ist das ja nicht der Fall...

            Kommentar


            • #7
              Das is bei keiner der Fall .

              Werd mir das mal anschauen und dann versuchen umzusetzen.

              Kommentar

              Lädt...
              X