MySQL-Queryproblem mit COUNT

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

  • MySQL-Queryproblem mit COUNT

    Hi Leutz,

    ich hab ein kleines Problem mit folgender Query
    Code:
    SELECT brokenlinks.bl_to as Artikel
         , COUNT(DISTINCT brokenlinks.bl_from) as Linkanzahl
      FROM cur, brokenlinks
      WHERE cur.cur_id = brokenlinks.bl_from
        AND cur.cur_namespace=0
        AND LENGTH(cur.cur_text) > 200
      GROUP BY brokenlinks.bl_to
      HAVING Linkanzahl = 1
      ORDER BY
    Artikel ASC,
    Linkanzahl DESC
      LIMIT 300
    Die gibt mir alle brokenlinks zurück die nur einmal vorhanden sind. Ich hab hier allerdings das Problem dass ich zwar weiss wie der Brokenlink heisst ich weiss aber nicht wo steht

    also hab ich den Artikel mit eingebaut

    Code:
    SELECT brokenlinks.bl_to as Artikel
         , COUNT(DISTINCT brokenlinks.bl_from) as Linkanzahl
         , cur.cur_title
      FROM cur, brokenlinks
      WHERE cur.cur_id = brokenlinks.bl_from
        AND cur.cur_namespace=0
        AND LENGTH(cur.cur_text) > 200
      GROUP BY brokenlinks.bl_to ,  cur.cur_title
      HAVING Linkanzahl = 1
      ORDER BY
    Artikel ASC,
    Linkanzahl DESC
      LIMIT 300
    leider geht es so aber nicht, da ich dann logischerweise auch die Brokenlinks zurückbekomme die mehrfach vorhanden sind, denn der COUNT funktioniert so nicht mehr so wie er soll bzw. er im ersten Query funktioniert hat. Wie kann ich dieses Problem bei MySQL umgehen? Ich arbeite eigentlich mit einer OracleDB und da würd ich einfach eine Subquery benutzten, leider gibt es diese Feature nicht bei MySQL

    PS: Die Tabellen sind die der Mediawikiversion 1.4 falls das jemandem was sagt. ICh versuche Artikel zu suchen die nur einmal überhaupt verlinkt wurden, denn dabei handelt es sich oft schlicht um Tippfehler.

  • #2
    hmm,

    im Geiste von MrHappiness hab ich es gelöst, der gute alte Join ersetzt wohl doch so manchen Subquery.

    so gehts

    Code:
    SELECT brokenlinks.bl_to as Artikel
         , COUNT(DISTINCT brokenlinks.bl_from) as Linkanzahl
         , t2.cur_title as Inartikel
      FROM cur, brokenlinks
      INNER JOIN cur t2 ON cur.cur_id = t2.cur_id
      WHERE cur.cur_id = brokenlinks.bl_from
        AND cur.cur_namespace=0
        AND LENGTH(cur.cur_text) > 200
      GROUP BY brokenlinks.bl_to
      HAVING Linkanzahl = 1
      ORDER BY
    Artikel ASC,
    Linkanzahl DESC
      LIMIT 30
    ich versteht zwar nicht wirklich warum aber egal

    Kommentar

    Lädt...
    X