MySQL Logik Problem

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

  • MySQL Logik Problem

    Moin!

    Habe ein Logik Problem in Sachen MySQL.

    Man soll Bilder bewerten können. Ich möchte in einer Tabelle die Bildinformationen (id, name..) und in einer anderen die Bewertungen (bildID, bewertung, datum) stehen haben.

    Ich glaube, das wäre das sauberste.

    Aber wie sortiere ich jetzt zB nach bester Bewertung? Irgendwie mit JOIN, aber wie?

    Gruß
    Carapau
    Lasst euch nicht lumpen, hoch den Humpen!

  • #2
    Mit JOIN sortiert man nicht, sondern fragt Daten aus verschiedenen Tabellen ab. Sortieren kannst Du mit ORDER BY.
    Edit:
    Mehr zu Joins findest Du hier
    Zuletzt geändert von gruenspan; 24.01.2007, 09:55.

    Kommentar


    • #3
      Hi!

      Dass man mit ORDER BY sortiert, ist mir klar. Habe mich falsch ausgedrückt. Das verknüpfen der Tabellen ist mein Problem.

      Gruß
      carapau
      Lasst euch nicht lumpen, hoch den Humpen!

      Kommentar


      • #4
        http://php-resource.de/forum/showthr...threadid=28292
        SELECT
        t1.zahl, t2.quadrat
        FROM
        tabelle1 t1
        INNER JOIN tabelle2 t2 USING(tab1_id)

        # alternativ
        # so können auch mehrere bedingungen angegeben werden
        # syntax is mit der bei WHERE identisch

        SELECT
        t1.zahl, t2.quadrat
        FROM
        tabelle1 t1
        INNER JOIN tabelle2 t2 ON t1.tab1_id = t2.tab1_id

        # mit ON können auch spalten verglichen werden, deren namen nicht gleich sind
        # aber schon allein der übersichtlichkeit halber wären identische spaltennamen besser
        # sinnloses beispiel:
        SELECT
        t1.zahl, t2.quadrat
        FROM
        tabelle1 t1
        INNER JOIN tabelle2 t2 ON t1.tab1_id = t2.tab2_id
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          Danke
          Lasst euch nicht lumpen, hoch den Humpen!

          Kommentar


          • #6
            alternativ koennte man auch ueberlegen, ob es sinnvoll waere die bewertungstabelle einfach wegzulassen und 2 spalten zu erzeugen:
            aktuelle bewertung als float
            anzahl bewertungen als (medium)int

            dann kannst du eine neue bewertung mit hilfe von
            aktuell=((aktuell * anzahl) + neu)/(anzahl+1) setzen
            und
            aktuell=aktuell+1

            hat nat auch nachteile: alleine mit dieser version kann man leider nicht mehrfach-bewerungen verhindern (da waere dann doch wieder eine andere tabelle noetig) oder tops der letzten 5 tage auflisten lassen. jedoch koennte eine kombination aus den beiden ansaetzen auch den gewuenschten erfolg bringen und die gesamte datenmenge verringern!

            mfg
            www.myplaner.de

            Kommentar


            • #7
              Hehe, genau so hatte ich es zuerst. Leider hat man so keine Kontrolle über Faker

              Hab mir jetzt noch n tolles SQL Buch geholt:
              http://www.amazon.de/SQL-Schl%C3%BCs...e=UTF8&s=books

              Da stehen n paar Sachen, die man sonst übersieht. Einfach, aber hilfreich - nur zu empfehlen!

              Gruß
              carapau
              Lasst euch nicht lumpen, hoch den Humpen!

              Kommentar


              • #8
                deswegen hatte ich ja auch die idee mit der kombination aus beiden. also das eigl rating wird in der haupttabelle gespeichert und man behaelt z.b. die bewertungen der letzten 5 tage in der bewertungstabelle. andernfalls koennten da enorme datenmengen anfallen, oder seh ich das falsch?

                mfg
                www.myplaner.de

                Kommentar


                • #9
                  andernfalls koennten da enorme datenmengen anfallen, oder seh ich das falsch?
                  Da haste schon recht, aber ich möchte erreichen, dass man nicht faken kann und zB einen anderen runtervotet..

                  Eigentlich dachte ich an sowas:
                  PHP-Code:
                  if(user hat schon einmal für dieses bild gevotet) {
                  // UPDATE
                  }
                  else {
                  // INSERT

                  Naja, werd wohl so machen, dass man nur alle $x Stunden voten kann. Hoffentlich merkts keiner

                  Gruß
                  carapau
                  Lasst euch nicht lumpen, hoch den Humpen!

                  Kommentar

                  Lädt...
                  X