[SQL allgemein] Alle nicht vorhandenen bekommen

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

  • [SQL allgemein] Alle nicht vorhandenen bekommen

    folgendes DB-Modell

    tabelle 1:
    Code:
    language_id             language
    1                              deutsch
    2                              englisch
    tabelle 2:
    Code:
    comm_id            language_id            translate_comm
    7                        1                              weiter
    7                        2                              forward
    8                        1                              Hallo
    das DB-modell kann nicht geändert werden!

    comm_id: eine ID für jedes Wort
    language_id: unterteilt die wörter in verschiedene Sprachen
    translage_comm: Wort in der jeweiligen sprache

    mein Problem:
    ich möchte abfragen, welches wort der sprache 1 nicht als wort in Sprache 2 vorhanden ist... die vorhandenen kann ich mir listen lassen, nur die nicht vorhandenen! es existiert kein eintrag für ein nicht vorhandenes wort in der tabelle, der eintrag ist nicht existent...
    alle statements mit "is null" haben mir immer keine Datensätze zurückgegeben, obwohl welche hätten gefunden werden sollen!

    beispiel:
    abfrage von deutsch (1) auf englisch (2) sollte mir ausgeben, dass für das deutsche wort "hallo" keine übersetzung in der datenbank vorhanden ist!

    gruss

  • #2
    Code:
    SELECT
      c.comm_id, c.language_id, c.translate_comm, COUNT(c.language_id)
    FROM 
      languages l 
      INNER JOIN words c USING (language_id)
    GROUP BY c.comm_id
    HAVING c.language_id=1 AND COUNT(c.language_id)=1
    so?
    Zuletzt geändert von mrhappiness; 14.08.2003, 15:42.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      mh... nee, nicht ganz!

      ich versuchs mal besser zu erklären!

      ich wähle die erste language_id aus (1 für deutsch)

      dann wähle ich die zweite sprache (2 für englisch) aus (soweit das frontend)

      die abfrage soll folgendes machen:

      suche aus der tabelle2 alle wörter zu language_id 1 (referenzsprache)
      und suche dazu alle wörter aus tabelle 2, die in der anderen sprache nicht vorhanden sind!

      es gibt insgesamt 15 sprachen in dieser tabelle!

      nochmal ein kurzes beispiel:
      Code:
      comm_id              language_id            translate_comm
      1                            1                             weiter
      1                            2                             forward
      1                            3                             andale (keine ahnung)
      2                            1                             hallo
      2                            3                             buenas dias
      so werden mehrere sprachen eingegeben. eine sprache ist die referenz (deutsch, id=1) und alle anderen sprachen, die nicht für das wort (comm_id) existieren, sollen gefunden werden...

      im obigen beispiel:
      nehme ich als referenzsprache deutsch und als suchsprache (wo die übersetzung fehlt) englisch sollte er mir die comm_id 2 ausgeben, weil das wort ja noch nicht vorhanden ist...

      hört sich kompliziert an, ist es anscheinend auch, da ich da seit ein paar stunden dran sitze

      gruss

      Kommentar


      • #4
        was is denn wenn du das so machst:
        Code:
        SELECT 
          c.comm_id, c.language_id, c.translate_comm, COUNT( c.language_id ) 
        FROM 
          words c
        GROUP  BY 
          c.comm_id 
        HAVING 
          c.language_id = 1 
          AND 
          COUNT( c.language_id )   < [i]anzahlsprachen>[/i]
        müsstest halt vorher die anzahl der sprachen auslesen

        so kriegst du zumindest raus, welche worte es indeutsch gibt, aber nicht in allen anderen sprachen, dann kannst du dir ja die vorhandenen sprachen dazu holen anhand von comm_id und weißt dannauch welche fehlen

        was umständlicheres fällt mir grad nich ein sry
        Zuletzt geändert von mrhappiness; 14.08.2003, 16:10.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          nee, brauch ich ja nicht!

          der user gibt ja vorher an, für welche sprache er alle nicht vorhandenen bekommen will!

          deutsch als referenzsprache is fest

          und danach wählt er aus einem dropdown aus!

          trägst du die par zeilen, die ich im beispiel gepostet habe in ne db, kannst du das schon testen, ein join brauchst du auf jeden fall!

          einmal alle comm_id s, die für deutsch verfügbar sind, danach nen join auf die selbe tabelle und alle anzeigen, die für die gewählte sprache (2) nicht vorhanden sind, aber in deutsch verfügbar sind...

          nur irgendwie will es nicht

          Kommentar


          • #6
            Code:
            SELECT 
              c. * , c2. *  
            FROM 
              words c 
              LEFT JOIN words c2 USING (comm_id)  
            WHERE 
              c.language_id = 1 
              AND 
              c2.language_id = 2
            liefert dir alle, die's für deutsch (1) als referenz gibt und auch für englisch (2)

            Wenn du das ergebnis als array speicherst und dann
            Code:
            SELECT *
            FROM words
            WHERE
              comm_id NOT IN (die ids oder auch nur eine)
              AND
              language_id=1
            machst solltest du alle kriegen, die's zwar auf deutsch aber nicht auf englisch gibt
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              mh... nee, geht auch nicht... er gibt mir 376 results zurück... das sind alle einträge, die da sind, soweit hatte ich das auch schon...

              sprache deutsch: 451 Einträge

              sprache russisch 376 Einträge


              ich brauch die differenz , die, die in deinem Statement fehlen...

              dachte, das geht mit einem Statement, aber wird dann wohl nicht... mit 2 statements i szu performance hungrig... bis ende des jahres sollen es zu jeder sprache ca. 15.000 einträge sein...

              Kommentar


              • #8
                *ausgrab*

                falls das problem immer noch besteht: vielleicht kannst du das hier ja umbauen für deine zwecke
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  danke, aber das problem mitlerweile mit nem workaround umgangen, durch den sogar Zeit gespart wird

                  grusss

                  Kommentar


                  • #10
                    OffTopic:
                    das merk ich mir, du bist bei mir untendurch jetzt
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11

                      Kommentar

                      Lädt...
                      X