Forum: Meine Themen/Abfrage

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

  • Forum: Meine Themen/Abfrage

    Hallo..

    Ich hab kleines Problem. Und zwar stelle ich eine Seite in meiner Community bereit, in der User übsichtlich sehen, in welchen wann und wo sie aktiv waren.

    Dafür sieht meine DB-Abfrage so aus:

    PHP-Code:

    $sql 
    "
    SELECT   
               DISTINCTROW thema.thread_id,
               COUNT(poster.post_id) AS anz,
               forum.foren_name,
               forum.foren_id,
               thema.thread_name,
               thema.thread_hits,
               thema.thread_user_id,
               thema.thread_last_action,
               thema.thread_pin,
               thema.thread_closed,
               thema.thread_datum,
               kateg.kat_name
    FROM
               postings poster
    INNER JOIN
               threads thema
            ON
               poster.post_ordnung = thema.thread_id

    INNER JOIN
               foren forum
            ON
               thema.thread_ordnung=forum.foren_id

    INNER JOIN
               kategorien kateg
            ON
               forum.foren_ordnung=kateg.kat_id
    WHERE
               thema.thread_versteckt = 0
      AND
               forum.foren_hidden = 1
      AND
               kateg.kat_hidden = 1
      AND
               poster.post_user_id = '"
    .$id_id."'
    GROUP BY
               poster.post_ordnung
    ORDER BY
               poster.post_datum DESC

    LIMIT 100

    "


    Er soll bei der Sortierung die letzten Thread auflisten. Letzter Thread an dem USER beteiligt war anzeigen. Dies macht er aber nicht.. doch das statement ist doch richtig oder?

    Ein weiteres problem habe ich, wenn ich die zeit differenzieren möchte, ich hatte es schon mit BETWEEN versucht, was leider auch nicht klappte.

    liegt es vielleciht daran, dass post_datum auf INT(10) ist?



    PS: Das Datum wird in Sekunden gespeichert
    PPS: _ordnung steht immer für einen primärschlüssel einer anderen tabelle.
    Zuletzt geändert von xManUx; 25.07.2004, 04:08.

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

  • #2
    Dies macht er aber nicht.. doch das statement ist doch richtig oder?
    Widerspruch?!?

    muss die query mal in ruhe ansehen...

    generell sollte es between egal sein, ob du jetzt nen unixtimestamp oder ein datetime hast. ist die frage ob du es richtig eingesetzt hast (s. oben). Kann ich nur schlecht beurteilen.

    Kommentar


    • #3
      Original geschrieben von TobiaZ
      Widerspruch?!?

      muss die query mal in ruhe ansehen...

      generell sollte es between egal sein, ob du jetzt nen unixtimestamp oder ein datetime hast. ist die frage ob du es richtig eingesetzt hast (s. oben). Kann ich nur schlecht beurteilen.
      sorry.. ich meinte er tut schon etwas sortieren, aber nicht so wie er soll :/ das klappte nicht: ( vielleicht ist hier auch nur ein denkfehler )

      wenn ich nach der WHERE

      Code:
      poster.post_datum BETWEEN ( ".strtotime("-2 days")." AND ".time()." )
      
      AND thema.blahblahblah
      oder

      Code:
      WHERE
      
      poster.post_datum > '".strtotime("-2 days")."'
      
      AND blah
      nehme, dann findet er keine einträge. würde ich statt > das zeichen nehmen < liefert er mir ergebnisse, die sind aber nicht gewünscht..

      ich denke, da ist irgendwo ein denkfehler.. maybe ist die post_datum eigenschaft auch nicht dafür geeignet?
      Zuletzt geändert von xManUx; 24.07.2004, 23:24.

      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
      sondern mit den Augen das Manual zu lesen.

      Kommentar


      • #4
        hast du die query mal ausgegeben?

        Kommentar


        • #5
          Original geschrieben von TobiaZ
          hast du die query mal ausgegeben?
          selbstverständlich. er füllt alles korrekt aus..


          SELECT DISTINCTROW thema.thread_id, COUNT(poster.post_id) AS puss, forum.foren_name, forum.foren_id, thema.thread_name, thema.thread_hits, thema.thread_user_id, thema.thread_last_action, thema.thread_pin, thema.thread_closed, thema.thread_datum, kateg.kat_name FROM postings poster INNER JOIN threads thema ON poster.post_ordnung = thema.thread_id INNER JOIN foren forum ON thema.thread_ordnung=forum.foren_id INNER JOIN kategorien kateg ON forum.foren_ordnung=kateg.kat_id WHERE poster.post_datum BETWEEN ( 1090583051 AND 1090755851 ) AND thema.thread_versteckt = 0 AND forum.foren_hidden = 1 AND kateg.kat_hidden = 1 AND poster.post_user_id = '1' GROUP BY poster.post_ordnung ORDER BY poster.post_datum DESC LIMIT 100

          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
          sondern mit den Augen das Manual zu lesen.

          Kommentar


          • #6
            ok.. ich hab die ursache gefunden und die abfrage nochmal neu gemacht..

            da group by schon - in meinem jetztigen fall - das gleiche bewirkt wie: DISTINCTROW, kann ich es weglassen. jedoch hat die sache einen haken. die sortierung stimmt nicht immer ganz, da doppelte "post_ordnung" auftauchen können, kann die reihenfolge sich um ein paar zeilen verschieben, was aber nicht erwünscht ist. was könnte man hier noch in den query geben, damit die sortierung dennoch stimmt? ;/ oder muss man den query doch etwas aufteilen, und z.b. die post_ordnung in ein array packen und mit implode WHERE IN() abfragen und so weiter, damit die sortierung stimmt? ( was aber etwas aufwändiger wäre.. aber wenns sein muss? )



            PHP-Code:

            $sqlxxl
            ="

            SELECT
                           poster.post_ordnung,
                           COUNT(poster.post_id) AS puss,
                           forum.foren_name,
                           forum.foren_id,
                           thema.thread_id,
                           thema.thread_name,
                           thema.thread_hits,
                           thema.thread_user_id,
                           thema.thread_last_action,
                           thema.thread_pin,
                           thema.thread_closed,
                           thema.thread_datum,
                           kateg.kat_name
            FROM
                           postings poster
            INNER JOIN
                           threads thema
                    ON
                           thema.thread_id = poster.post_ordnung

            INNER JOIN
                           foren forum
                    ON
                           thema.thread_ordnung=forum.foren_id

            INNER JOIN
                           kategorien kateg
                    ON
                           forum.foren_ordnung=kateg.kat_id

            WHERE
                           poster.post_datum > '"
            .strtotime("-2 days")."'
              AND
                           poster.post_user_id = '1'
              AND
                           thema.thread_versteckt = '0'
              AND
                           forum.foren_hidden = '1'
              AND
                           kateg.kat_hidden = '1'
            GROUP BY
                           poster.post_ordnung
            ORDER BY
                           poster.post_datum DESC
            "

            Zuletzt geändert von xManUx; 28.07.2004, 01:53.

            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
            sondern mit den Augen das Manual zu lesen.

            Kommentar


            • #7
              niemand ne antwort?

              Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
              sondern mit den Augen das Manual zu lesen.

              Kommentar


              • #8
                Also erstmal kannste das GROUP BY nicht weglassen, denn Du benutzt eine Aggregatsfunktion. Ausserdem solltest Du nach allen single cols gruppieren, ansonsten knnen unerwartete Ergebnisse auftreten.
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  Original geschrieben von MelloPie
                  Also erstmal kannste das GROUP BY nicht weglassen, denn Du benutzt eine Aggregatsfunktion. Ausserdem solltest Du nach allen single cols gruppieren, ansonsten knnen unerwartete Ergebnisse auftreten.
                  Wann wollte ich GROUP BY weglassen? Was sollte ich noch gruppieren?

                  Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                  sondern mit den Augen das Manual zu lesen.

                  Kommentar


                  • #10
                    Hi,

                    Mal kurz aus dem Man dazu ...

                    http://dev.mysql.com/doc/mysql/de/Gr...functions.html

                    Wenn Sie in einem Statement eine Gruppierungsfunktion benutzen, die keine GROUP BY-Klausel enthält, ist das gleichbedeutend mit der Gruppierung aller Zeilen.

                    Und ich glaube das ist nicht gewünscht.

                    Gruß GriZZ

                    Kommentar


                    • #11
                      Original geschrieben von xManUx
                      Wann wollte ich GROUP BY weglassen? Was sollte ich noch gruppieren?
                      [zitat]da group by schon - in meinem jetztigen fall - das gleiche bewirkt wie: DISTINCTROW, kann ich es weglassen[/zitat]
                      und Du sollst nach allen einzel spalten gruppieren, lies halt mal was über sql dann merkst Du schon was ich meine
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        ich lasse die beiträge des users zählen für JEDES thema, wieviele beiträge er dort selbst geschrieben hat. darum hab ich dieses count drin, was bei mir nach den threads gruppiert! ( post_ordnung ) = IDschlüssel des threads.. insofern passt das !

                        Zuletzt geändert von xManUx; 04.08.2004, 07:10.

                        Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                        sondern mit den Augen das Manual zu lesen.

                        Kommentar


                        • #13
                          Original geschrieben von MelloPie
                          [zitat]da group by schon - in meinem jetztigen fall - das gleiche bewirkt wie: DISTINCTROW, kann ich es weglassen[/zitat]
                          und Du sollst nach allen einzel spalten gruppieren, lies halt mal was über sql dann merkst Du schon was ich meine

                          öhm.. also ich meinte definitiv, dass ich DISTINCTROW auf grund von GROUP BY weg lassen kann.. zweideutig formuliert.. sorry.. ohne group by würde es selbstverständlich net gehn..
                          Zuletzt geändert von xManUx; 04.08.2004, 00:24.

                          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                          sondern mit den Augen das Manual zu lesen.

                          Kommentar

                          Lädt...
                          X