grundsätzliche Frage zu mysql-Abfrage

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

  • grundsätzliche Frage zu mysql-Abfrage

    Hallo zusammen !

    Datenbank A und B liegen auf dem gleichen Server.
    Ich mache jetzt eine Abfrage auf A und erhalte 50 Datensätze.

    Diese 50 Datensätze durchlaufe ich in einer Schleife und prüfe ein Statusfeld.
    Ist in dem Statusfeld eine 1 so mache ich ein Select auf Datenbank B.

    Das Ganze funktioniert auch, ist aber beim ersten MAl etwas langsam.
    Führt man das mehrmals hintereinander, so ist die Geschwindigkeit akzeptabel.

    Meine Frage :
    Ist es besser, die Schleife zu durchlaufen, und jeden Datensatz in einem eigenen Select-Statemant zu holen,
    oder sollte ich nach der Statusprüfung ein Feld zusammenbauen, das die where-Bedingung für ein Select-Statemant enthält.

    Was ist schneller (merkbar schneller)?
    PHP-Code:
    select id from tab1 where id 1
    select id from tab1 where id 
    2
    select id from tab1 where id 
    3
    select id from tab1 where id 
    4
    select id from tab1 where id 

    oder
    PHP-Code:
    select id from tab1 where id OR id=OR id=OR id=OR id=
    Ich hoffe ich konnte mich verständlich ausdrücken.

    gruss
    jogi

    p.s.
    Bevor jetzt jemand schreibt,ich solle das probieren.
    Ich muss dann sehr viel ändern, desshalb wollte ich erstmal nur wissen, ob jemand damit schon seine Erfahrungen gemacht hat.

  • #2
    Hi

    Ich würde 2. nehmen. Allerdings würde ich nicht alles mit ORs verknüpfen, sondern IN() benutzen.
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Hallo,

      wie bereits gesagt wurde: Lösung 2 ist die bessere jedoch mit IN()

      Allerdings sollte auch die erste Lösung bei 50 Datensätzen nicht merklich langsamer sein, hast du den nen Index auf der Spalte id??
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        ja, index ist auf spalte id.

        Ich denke ja, dass es damit zusammenhängt, dass ich ja auf eine andere Datenbank gehe.

        Die Datenbanke liegen zwar auf dem gleichen Server, sind aber zwei verschieden Datenbanken.

        Vielleicht liegt es daran ?

        Kommentar


        • #5
          Hmmm, ich nehme ja an dass du da vorhin nur Beispiel-Querys gepostet hast... sind die Datensätze in deinen 'Original'-Abfragen geliefert werden vielleicht sehr groß??

          Aber wie gesagt, pack das ganze in einen einzigen Query und es sollte flutschen

          mal als Beispiel:
          PHP-Code:
          while($row mysql_fetch_array($result,MYSQL_ASSOC))
          {
              
          $id[] = $row["id"];
          }
          $in implode(",",$id);

          $query "select id from tab1 where id IN ($in)"
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            warum nicht eine JOIN-Abfrage erstellen und die Daten direkt aus DB B raus holen? Etwa so:

            select ... from dba.tbla a inner/left/right join dbb.tblb b on a.id=b.id ...

            ist auf jeden Fall besser als 'ne Schleife

            Kommentar


            • #7
              Wäre natürlich die Premium-Lösung, ganz klar. Geht halt nur wenn er mit einer Kennung auf beide DB's kann.

              Hatte ja vor kurzem ein ähnliches Problem, ich kann halt nicht mit einer Kennung auf beide DB's und daher bin ich jetzt irgendwie hier auch davon ausgegangen....
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar

              Lädt...
              X