Ankündigung

Einklappen
Keine Ankündigung bisher.

MYSQL: Hilfe bei Abfrage

Einklappen

Neue Werbung 2019

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

  • MYSQL: Hilfe bei Abfrage

    Hallo Gemeinde,

    Ich wünsch euch einen schönen Sonntag und warte gleich mal mit einer Frage auf. Ich habe diese Datenbank

    CREATE TABLE `lapTimes` (
    `raceId` int(11) NOT NULL,
    `driverId` int(11) NOT NULL,
    `lap` int(11) NOT NULL,
    `position` int(11) DEFAULT NULL,
    `time` varchar(255) DEFAULT NULL,
    `milliseconds` int(11) DEFAULT NULL,
    PRIMARY KEY (`raceId`,`driverId`,`lap`),
    KEY `raceId` (`raceId`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    jede lap hat einen eintrag und das gibt es von jeder driverId. So gibt es von 20 driverIds auch 20 erste Runden , 20 zweite runden etc. Sind ne menge daten.
    Ich bräuchte ein Array wo die driverId mit allen runden ( position ) drin sind und das für eine bestimmte raceId.

    Ich steh gerade ein wenig auf dem Schlauch und bin auch nicht der Profi. Könnte mir wer ein paar anstösse geben, wie ich die Abfrage gestalten kann, das jede driverId mit allen position rauskommen.

    Danke und schönes rest weekend

  • #2
    Wo genau hängst Du? Macht Dir die Query bereits Sorgen?
    Du schreibst etwas von einem Array, was auf PHP o.ä. deutet?
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Ja die query ist mein problem.
      PHP-Code:
      SELECT driverId,position FROM lapTimes WHERE driverId <= AND raceId 991 

      PHP-Code:
       Array (    
              [
      0] => Array        
                      (            
                             [
      driverId] => 1            
                             
      [position] => 5        
                      
      )    
               [
      1] => Array        
                        (            
                              [
      driverId] => 1            
                              
      [position] => 5        
                      

      Die abfrage müsste aber folgendes auswerfen
      PHP-Code:
        Array (    
                [
      0] => Array        
                     (            
                          [
      driverId] => 1        
                      
      )        
                     [
      0] => Array            
                                (                  
                                           [
      position] => 5                                    
                                           
      [position] => 5                  
                                          
      [position] => 5              
                                


      Ich möchte das ganze schon in der abfrage sortieren und dann erst in php bzw json weiterverarbeiten

      Kommentar


      • #4
        Gib die Driver id halt nicht aus, die hast du ja schon als eingrenzendes Kriterium.
        Darüber hinaus kannst du die Zeiten mit Millisekunden auch in einer Spalte ablegen, siehe dazu https://dev.mysql.com/doc/refman/5.7...l-seconds.html
        und du solltest besser InnoDB als Engine verwenden anstatt das veraltete MyIsam

        Kommentar


        • #5
          Ich bekomme die Daten geliefert über eine API. Also kann ich an den Daten selber nichts machen.
          Habe es jetzt so zum laufen bekommen.
          PHP-Code:
          $data $sql->db_select("SELECT lt.driverId FROM lapTimes lt

                                   WHERE lt.raceId = 991
                                   GROUP BY lt.driverId
                                   ORDER BY lt.driverId ASC"
          );

          foreach(
          $data as $d) {
              
          $row[] = $sql->db_select("SELECT driverId,position FROM lapTimes
                                                      WHERE driverId = "
          .$d['driverId']." AND raceId = 991");


          geht das effektiver?

          Kommentar


          • #6
            Zitat von hathor Beitrag anzeigen
            Ich bekomme die Daten geliefert über eine API. Also kann ich an den Daten selber nichts machen.
            ..
            geht das effektiver?
            Wie ist das zu verstehen "Daten über eine API" Du verwendest sql zur Abfrage (was man auch als API bezeichnen kann).

            Vielleicht hilft Dir
            JSON_ARRAYAGG(col_or_expr)
            oder
            JSON_OBJECTAGG(key, value)
            weiter.

            (Bei den Funktionen der mySQL Doku bitte auf passende Version achten)

            Kommentar


            • #7
              Zitat von Perry Staltic Beitrag anzeigen

              Wie ist das zu verstehen "Daten über eine API" Du verwendest sql zur Abfrage (was man auch als API bezeichnen kann).

              Vielleicht hilft Dir
              JSON_ARRAYAGG(col_or_expr)
              oder
              JSON_OBJECTAGG(key, value)
              weiter.

              (Bei den Funktionen der mySQL Doku bitte auf passende Version achten)
              Es ist eine fertige db, die ich nur über meine kopiere. Die struktur ist vorgegeben.

              Kommentar


              • #8
                Ich halte nach dem was du sagst dein Wissen über SQL und Datenbanken für ausbaubar.
                Es scheint ein guter Zeitpunkt zu sein, dich erst mal in diese Thematik einzuarbeiten, damit du es nicht noch schwerer hast.
                Je länger du wartest und immer mit dieser Krücke arbeitest, desto mehr Arbeit hast du später, wenn du mehr darüber weisst, weil Änderungen dann mit erheblichen Mehraufwand verbunden sind.

                Besser du machst erst mal nicht weiter und verbesserst deinen Wissensstand, danach optimierst du deine DB setzt Indexe und dann fällt dir auch das Erstellen von Abfragen leichter.

                Ein guter Einstieg ist zum Beispiel http://www.peterkropff.de/site/mysql/mysql.htm

                Kommentar


                • #9
                  Zitat von protestix Beitrag anzeigen
                  Besser du machst erst mal nicht weiter und verbesserst deinen Wissensstand, danach optimierst du deine DB setzt Indexe und dann fällt dir auch das Erstellen von Abfragen leichter.
                  Ich habe das nun so verstanden, dass die Struktur nicht ändern kann / will, um kompatibel zu bleiben wie auch immer.

                  Die Frage nach "effektiver" hätte ich auch eher als eine Frage nach eleganterem Code, weniger Code, usw. verstanden.

                  Die "Menge Daten" kann nicht sehr groß sein, es ist ein Rennen und davon gibt's nicht viel.
                  Oder wie sieht das konkret aus? Also wieviel ist "ne Menge"?

                  Kommentar


                  • #10
                    Hm .. dein angegebenes Beispiel-Array als "Wunschziel" ist leider nicht möglich, weil nicht valide ... 2 mal Index [0] und auf der gleichen "Ebene" sogar x mal Index["Position"]geht nicht ...da wird wohl eine Klammer falsch sein ..
                    .. auch gleich die Schreibweise ... [position] ist schlecht ... jedes mal ein Fehler der Kategorie Warning, der aber auch mal wirklich auf die Füße fallen kann ...
                    ansonsten hängt doch alles nur an diesem Codeschnipsel
                    PHP-Code:
                    foreach($data as $d) {
                        
                    $row[] = $sql->db_select("SELECT driverId,position FROM lapTimes
                                                                WHERE driverId = "
                    .$d['driverId']." AND raceId = 991");


                    wenn du die driverID anders haben willst, musst du doch nur den Code umschreiben

                    PHP-Code:
                    foreach($data as $d) {
                        
                    $row[$d['driverId']][] = $sql->db_select("SELECT position FROM lapTimes
                                                                WHERE driverId = "
                    .$d['driverId']." AND raceId = 991");


                    aber den Hinweis hast du ja schon bekommen .. mehr Grundlagen
                    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                    Kommentar


                    • #11
                      Ich verstehe nicht so ganz wieso die SQL Abfrage in eine Schleife muss,
                      geht das nicht anders?
                      und den Link:
                      https://php-de.github.io/jumpto/gruppenbruch/
                      hab ich eh auch vermisst.

                      Kommentar


                      • #12
                        Schleife, weil er nacheinander alle Renn-Ergebnisse will - könnte man sicherlich auch der Datenbank überlassen, da hast du recht
                        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                        Kommentar

                        Lädt...
                        X