Für Profis -> Interessante SQL Abfrage

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

  • Für Profis -> Interessante SQL Abfrage

    Folgendes Problem:
    Ich habe eine Tabelle, die in der Übersichtsseite nach Namen sortiert ausgegeben wird. Um später von der Detail-Seite wieder zurückkehren zu können, muss ich die Position den sog. dataset feststellen. Das ist hier die eigene Position des Datensatzes innerhalb einer Kategorie.

    Zur Zeit wird das Problem so gelöst:

    PHP-Code:
    $res mysql_query("SELECT id FROM shop_products  WHERE cat_id='".$result['cat_id']."'  ORDER BY name");

       while(
    $tmp mysql_fetch_assoc($res))
          {
          
    $dataset++;
          if(
    $tmp['id'] == $productid)
             break;
          } 
    Aber geht das nicht auch einfacher mit einer SQL-Abfrage? Mir fällt dazu leider nix ein.

    greetz Tom

  • #2
    mit einem SELECT COUNT und dem Zählen der Einträge, die nach der Sortierung vor dem aktuellen Eintrag sind?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ja, sowas habe ich mir auch schon gedacht.
      Eventuell ein Beispiel auf Lager?

      Kommentar


      • #4
        SELECT COUNT(id) FROM shop_products WHERE

        da kommt jetzt die catid hin und der name, vergleichen tust du mit =, >, <, <= oder <=
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Ok: Folgende fiktive Tabelle:

          Code:
          +++++++++++++++
          + id + name +++
          +++++++++++++++
          +  1 + Marcus +
          +  2 + Peter  +
          +  3 + Hannes +
          +  4 + jörg   +
          +  5 + Michael+
          +++++++++++++++
          Die soll nun nach Namen sortiert werden. Dann sieht sie so aus:

          Code:
          +++++++++++++++
          + id + name +++
          +++++++++++++++
          +  3 + Hannes +
          +  4 + jörg   +
          +  1 + Marcus +
          +  5 + Michael+
          +  2 + Peter  +
          +++++++++++++++
          Und nun würde ich gerne die Position von z.B. Marcus innerhalb der Tabelle in dieser Reihenfolge wissen. Ich glaub nicht, dass es mit dem WHERE geht, oder?
          SQL ist aber auch nicht mein Spezialgebiet - belehre mich eines besseren :-)

          Kommentar


          • #6
            order by name asc

            die reihenfolge fragts du dann per php ab

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              SELECT COUNT(name)
              FROM
              tabelle
              WHERE name <= 'Marcus'
              ORDER BY name DESC
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Ok, das ist schon gut, wie du es sagtest:

                SELECT COUNT(name)
                FROM
                tabelle
                WHERE name <= 'Marcus'
                ORDER BY name DESC

                Aber ein weiteres Problem ist, das die Namen nicht unbedingt unique sind, und mein einziges Kriterium festzustellen, ob es sich tatsächlich um den entscheidenden Datensatz handelt, der Vergleich der id ist.
                Und das:

                SELECT COUNT(name)
                FROM
                tabelle
                WHERE id <= '$id'
                ORDER BY name DESC

                ...funzt bestimmt. Nicht...
                Sorry, hatte mich schlecht ausgedrückt...

                Kommentar


                • #9
                  Warum gibst du eigentlich nicht die Position an die Detailseite weiter?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Weil es nicht nur für die Detail-Seite interessant ist, sondern ein größeres Problem ist. Es wird an mehreren Stellen benutzt...

                    Es funktioniert ja auch, wie ich es an erster Stelle gepostet habe, aber es müsste doch irgendie auch einfacher gehen

                    greetz tom...

                    Kommentar


                    • #11
                      Bin nicht sicher ob das jetzt hilft, habe auch nur wenig zeit:

                      Auf der Übersichtsseite muss du die Daten doch eh ausgeben oder ? Also bestimme die Position dort und übergebe die Position wohin du die auch immer brauchst (zb ibn der Session)

                      bei gleicher Abfrage und (nicht geänderter Datenbank (DS dazu oder weg)) kannst du dann mittels

                      SELECT ***
                      LIMIT $POSITION,1

                      order my mysql_data_seek($result,$position)

                      eben jenen erneut aufrufen.

                      Allerdings sollte die DB mittlerweile erneut bestückt worden sein oder der Index neu gebaut oder ein Datensatz gelöscht worden sein, stimmt die Position eh nicht mehr

                      Hoffe das hilft
                      chansel0049
                      ----------------------------------------------------
                      if you've reached the bottomline - dig further!
                      Übersetzer gesucht? http://www.babelport.com

                      Kommentar


                      • #12
                        Original geschrieben von chansel0049
                        Also bestimme die Position dort und übergebe die Position wohin du die auch immer brauchst (zb ibn der Session)
                        Hi, sorry, hatte wenig Zeit am WE...
                        Danke erstmal für deine Antwort, aber so leicht ist es auch wieder nicht. Sicherlich hast du recht, und in diesem Falle wird es sogar so gemacht, aber es gibt noch viele andere Fälle, wo ich einfach nur die ID des Datensatzes habe, und mir daraus die Position errechnen muss.
                        Wie gesagt, es funktioniert ja so, wie ich es geproggt habe, aber es müsste doch auch noch leichter gehen, mit nur einer Abfrage oder?

                        Mfg tom

                        Kommentar

                        Lädt...
                        X