SQL mit Count(*)

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

  • SQL mit Count(*)

    Hallo, ich habe folgendes Problem:

    Zwei Tabellen, in der einen stehen die Autoren und in der anderen die Titel mit der Zurodnung zum Autor:

    T1: AID; Autor; Anzahl
    T2: TID; Titel; AID

    Nachdem alles eingefügt ist, möchte ich in die T1 jeweils die Anzahl der
    Titel abspeichern, die zum jeweiligen Autor passen:

    Die SQL-Abfrage für die einzelne AID wäre:


    PHP-Code:
    SELECT titelcount(*) as anzahl FROM T2 WHERE AID ='10' 
    Jetzt möchte ich, dass die Anzahl für jede AID zu der jeweiligen AID in die Tabelle T1 geschrieben wird.

    Ich dachte, dass die wie folgt gehen müsste:
    PHP-Code:
    UPDATE T1 SET Anzahl = (SELECT Count(*) FROM T2
    WHERE INNER JOIN T2 ON T1
    .AID T2.AID)
    WHERE INNER JOIN T2 ON T1.AID T2.AID
    Würde mich freuen, wenn mir jemand helfen würde oder einen Hinweis auf die Lösung geben könnte.

    Vielen Dank im Vorraus
    flo

  • #2
    Ich dachte, dass die wie folgt gehen müsste:
    aber?


    SELECT
    autor.id,
    COUNT(artikel.id) num
    from
    autor
    LEFT JOIN artikel ON autor.id = artikel.autor_id
    GROUP BY
    autor.id

    müsste die schonmal die anzahlen liefern...

    Kommentar


    • #3
      Ja, die Countabfrage geht, auch wenn sie auf meinem Rechner etwas schwerfällig ist bei folgender DB-Grösse: Autor: 3000 und Titel: 14000

      Auf dem Rechner habe ich aber ne DB mit ca. 60.000 Autoren und 1.090.000 Titeln. Da wird mir der Rechner abstürzen, kann ich da mit LIMIT arbeiten?

      Aber zunächst wäre toll, wenn jemand mir bei der Updateanweisung helfen könnte...
      ... ich wer es natürlich auch versuchen.

      Kommentar


      • #4
        Auf dem Rechner habe ich aber ne DB mit ca. 60.000 Autoren und 1.090.000 Titeln. Da wird mir der Rechner abstürzen, kann ich da mit LIMIT arbeiten?
        mit limit würdest du automatisch den zähler (count()) beschränken.

        Kommentar


        • #5
          mach mal ein
          EXPLAIN SELECT
          autor.id,
          COUNT(artikel.id) num
          from
          autor
          LEFT JOIN artikel ON autor.id = artikel.autor_id
          GROUP BY
          autor.id

          und poste das result-triple

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Explain Abfrage:

            PHP-Code:
            table  type  possible_keys  key  key_len  ref  rows  Extra  
            autor index NULL PRIMARY 4 NULL 61628 Using index
            Using temporary 
            artikel ALL NULL NULL NULL NULL 1091139 

            Kommentar


            • #7
              Original geschrieben von flo
              Explain Abfrage:

              PHP-Code:
              table  type  possible_keys  key  key_len  ref  rows  Extra  
              autor index NULL PRIMARY 4 NULL 61628 Using index
              Using temporary 
              artikel ALL NULL NULL NULL NULL 1091139 
              Kein Wunder, dass der Query langsam ist ... du weißt was Indizes sind und wofür sie gut sind?! ... Wenn nicht solltest du mal schnell zu Google rennen und dein Wissen diesbezüglich aufpolieren oO

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Ja mit indexierung hat jetzt zumindest ein insert in eine hilfstabelle geklapt.

                Ich möchte aber die bestehende tabelle updaten:




                PHP-Code:
                UPDATE autoren
                SET anzahl 
                = (SELECT anzahl from autoren
                LEFT JOIN autorenhilfstb ON autoren
                .aid autorenhilfstb.aid)
                LEFT JOIN autorenhilfstb ON autoren.aid autorenhilfstb.aid
                wenn ich allein den Select ausdruck mit explain abfrage, erhalte ich folgendes ergebnis:


                Column: 'anzahl' in field list is ambiguous
                In der Tabelle autoren ist die Spalte anzahl leer und in der
                Hilfstabelle sind jetzt bereits die gezählten ergebnisse. Via Insert hätte ich aus den beiden Tabellen ja eine neue Tabelle erstellen können, in der alle Parameter schon stehen würden, damit müsste ich bei neuen Datn aber immer eine neue Tabelle ertellen, dabei würden die bestehenden Daten evtl. einen neuen Primärschlüssel bekommen, was nicht in meinem sinne ist.

                Kommentar


                • #9
                  Original geschrieben von flo
                  wenn ich allein den Select ausdruck mit explain abfrage, erhalte ich folgendes ergebnis:
                  Column: 'anzahl' in field list is ambiguous
                  Und das hast du dir natürlich mal übersetzen lassen.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    ja, ich versteh schon dass anzahl nicht eindeutig ist,

                    ich will aber nur die "anzahl" hinzufügen.

                    Ich hab eine Tabelle id, name, anzahl wobei die spalte anzahl leer ist
                    und die zweite id, anzahl

                    jetzt würde ich am liebsten.
                    update t1 set anzahl = t2.anzahl
                    where t1.id = t2.id

                    Laut buch müsste auch gehen:

                    PHP-Code:
                    update t1 left join t2 ON (t1.id=t2.id)
                    set t1.Spalte Wert Where t2Spalte Wert
                    daraus könnte ich doch machen:
                    PHP-Code:
                    update t1 left join t2 ON (t1.id=t2.id)
                    set t1.Spalte t2.Spalte Where t2id t1.id
                    Ich versteh es nicht

                    Zuletzt geändert von flo; 26.03.2007, 12:55.

                    Kommentar


                    • #11
                      ambigous = Es gibt mehrere Tabellen mit einer Spalte "anzahl"

                      Lösung: Sage der Datenbank, welche anzahl du haben willst

                      Syntax. tabellenname.spaltenname
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Ich hab jetzt auf dem Rechner
                        MySQL 3.23.47-max-debug auf localhost als root@localhost
                        Kann sein, dass das ganze auf meinem Rechner nicht funktioniert.
                        Im Markt und Technick Buch steht jetzt, dass ab der Version 4 man mit dem
                        Update-Befehl mehrere Tabellen einbinden kann?

                        Kommentar


                        • #13
                          ich will aber nur die "anzahl" hinzufügen.
                          Welche??? Wie wahsaga schon sagte. es gibt mehrere. Woher soll MySQL (egal welche version) wissen, welche du meinst?

                          Kommentar


                          • #14
                            Vielleicht bin ich zu doof, aber die Select-Abfrage geht jetzt und liefert
                            das richtige ergebnis:
                            PHP-Code:
                            SELECT autorenhilfstb.anzahl from autorenhilfstb
                            LEFT JOIN autoren ON autoren
                            .id autorenhilfstb.id 

                            Das hier liefert einen Fehler:
                            PHP-Code:
                            Update autoren SET autoren.anzahl = (SELECT autorenhilfstb.anzahl from autorenhilfstb
                            LEFT JOIN autoren ON autoren
                            .id autorenhilfstb.id)
                            LEFT JOIN autorenhilfstb ON autoren.id autorenhilfstb.id
                            Fehler:
                            You have an error in your SQL syntax near 'SELECT autorenhilfstb.anzahl from autorenhilfstb
                            LEFT JOIN autoren ' at line 1



                            Kommentar


                            • #15
                              Original geschrieben von flo
                              PHP-Code:
                              Update autoren SET autoren.anzahl = (SELECT autorenhilfstb.anzahl from autorenhilfstb
                              LEFT JOIN autoren ON autoren
                              .id autorenhilfstb.id)
                              LEFT JOIN autorenhilfstb ON autoren.id autorenhilfstb.id
                              Was genau bezweckst du denn bitte mit dieser Klammersetzung ...?

                              Hirn einschalten, überlegen - was steht da jetzt eigentlich?

                              UPDATE tabelle SET spalte = (...wert...)
                              LEFT JOIN ...

                              Ergibt es deiner Ansicht nach irgendeinen Sinn, UPDATE mit LEFT JOIN zu kombinieren?
                              Falls ja, sind wir gespannt, welcher das sein sollte.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X