Abfrage auf mehrere Tabellen

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

  • Abfrage auf mehrere Tabellen

    Hallo,

    Also eigentlich sind Joins nicht so mein Problem aber hier hab ich irgendwie probleme

    Mein Problem:

    Ich habe 3 Tabellen

    Tabelle cats
    Dort stehen Kategorien drin

    Tabelle users
    Hier sind Mitglieder drin, wobei jedem Mitglied ein String zugeordnet ist, mit seinen Interesse.

    Erstmal lasse ich alle Kategorien mit der Menge der Mitglieder ausgeben, die sich für diese Kategorie entschieden haben.

    PHP-Code:
    $a=mysql_query("SELECT cat_id,name from cats where parent_cat_id = '0'") or die(mysql_error());
        
        while(
    $cats=mysql_fetch_array($a)){
        
        
    $b=mysql_query("SELECT count(*) from users where interessen like '%$cats[cat_id]|%'") or die(mysql_error());
        list(
    $menge)=mysql_fetch_row($b);
                
        
    $interessen.="$cats[name] ($menge)<br>";
        } 
    So hier werden die Kategorien ausgegeben und in der while Schleife wird geschaut wieviele User die Kategorie bei interessen eingetragen haben. So das klappt soweit ganz gut.


    So nun habe ich noch ne andere Tabelle dort werden eMail nachrichten geloggt. Also wenn ne Mail rausgeht wird das sort mit einem Datensatz vermerkt. Jeder USer kann auswählen wieviele EMails er pro Woche bekommen möchte.

    Jetzt muss ich im Prinzip beide Tabellen Joinen und nur die User ausgeben, bei denen die anzahl der Datensätze in der Log Tabelle kleiner ist als der angegebene Wert in Tabelle users.


    Ein Versuch war z.B

    PHP-Code:
    $b=mysql_query("SELECT count(p1.user_id) AS usermenge, count(p2.user_id) AS mailmenge from users p1 LEFT OUTER JOIN logmail p2 ON p1.mail_woche < mailmenge'") or die(mysql_error()); 

  • #2
    Du solltest Dich mal mit den GROUP BY und HAVING Clauses auseinandersetzen ... darin liegt Deine Lösung ... !

    http://dev.mysql.com/doc/mysql/en/SELECT.html
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Danke schonmal

      Also ich habs jetzt so probiert

      PHP-Code:
      $b=mysql_query("Select count(p1.user_id) from el12_users  p1 
      Left Join el12_logmail p2 ON p1.user_id = p2.user_id 
      where interessen like '%
      $cats[cat_id]|%' 
      group by p1.user_id,p2.user_id having count(p2.user_id) < 'p1.mail_woche' "
      ) or die(mysql_error()); 
      Meine mit logische Folgerung aus der Abfrage
      Ich frage die Anzahl der User aus users ab...
      Die Tabelle el12_users wird mit el12_logmail gejoint. Allerdgins nur bei denen wo die ID übereinstimmt.
      Dies passiert aber nur dort wo interessen like '%$cats[cat_id]|%' ist.
      Am schluss wird noch gruppiert weil ich ja count benuzt habe


      Jetzt das unlogische
      -->
      Mit having zähle ich die gesamten Einträge von p2 und schaue ob sie kleiner sind als p1.mail_woche.
      Ich muss aber die Einträge von jedem einzelnen User durchgehen, der in users ist. Durch das Joinen und der Bedinung On sollte das aber doch nicht der Fall sein


      So ich bekomme nichts raus



      LOL ich bin fertig mit der Welt
      Zuletzt geändert von Sebastian.J; 06.08.2004, 13:28.

      Kommentar


      • #4
        Ich versuche gerade zu verstehen was du damit willst:
        Code:
        count(p2.user_id) < 'p1.mail_woche'
        ... oder besser ... warum du "p1.mail_woche" in Anführungszeichen setzt ... und somit zu 'nen String machst ...

        Ich weiss das hier einige Spinner im Forum existieren die Anführungszeichen und Hochkommas um fast alles setzen was sich nicht schnell genug abhauen kann ... aber oft ist das einfach ein Fehler ... !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Also ich möchte schauen wieviele Einträge in der Tabelle el12_logmail von dem User sind.... Diese sollte kleiner sein als die Zahl die in mail_woche steht.


          Über die '' können wir uns später noch unterhalten

          Kommentar


          • #6
            Original geschrieben von Sebastian.J
            Über die '' können wir uns später noch unterhalten
            Würde ich nicht so sehen ... weil genau die Dein Problem sind ... !
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              mache cih sie weg kommt

              PHP-Code:
              Unknown column 'p1.mail_woche' in 'having clause' 

              Kommentar


              • #8
                OffTopic:
                schön für dich

                und jetzt?
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Original geschrieben von Sebastian.J
                  mache cih sie weg kommt

                  PHP-Code:
                  Unknown column 'p1.mail_woche' in 'having clause' 
                  Irgendwie würde ich mir dann man überlegen, ob das Attribute "mail_woche" in der Tabelle "el12_users" überhaupt vorhanden ist ...
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    @derHund
                    soll sowas witzig sein oder wie

                    @goth
                    ok danke für die Hilfe das Feld exestiert aber ich kritzel die ganzen bedingungen nochmal aufs Papier und schau meine Unterlagen nochmal durch. So ein Problem lässt sich irgednwie schlecht im Forum klären.

                    Kommentar


                    • #11
                      soll sowas witzig sein oder wie
                      OffTopic:
                      ja, deinerseits dachte ich ...

                      du postest die fehlermeldung, in der steht, daß die spalte in der tabelle nicht bekannt ist, ... und nix weiter. ist doch voll witzig.
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        Original geschrieben von derHund
                        OffTopic:
                        ja, deinerseits dachte ich ...

                        du postest die fehlermeldung, in der steht, daß die spalte in der tabelle nicht bekannt ist, ... und nix weiter. ist doch voll witzig.
                        Ja schon obwohl sie exestiert... lach ich morgen noch drüber

                        Dann arbeite ich mal weiter

                        Kommentar


                        • #13
                          Da muss ich allerdings wirklich sagen: "Das glaube ich Dir nicht!" ...

                          Wichtigster Grundsatz eines Programmierers: "SWITCH ist nicht kaputt!" ... !
                          carpe noctem

                          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                          Kommentar


                          • #14
                            Guten Morgen

                            Also ich beschreib das ganze Problem nochmal genau, denn so wie ich den Ansatz rüber gebracht habe geht das ganze nicht. Ich habe hier irgend ein Join genommen, der mir die Datensätze verknüpft.

                            wichtig sind erstmal 2 Tabellen

                            Tabelle users

                            user_id | interessen | mail_woche

                            Tabelle logmail

                            user_id | mail_id | security_code


                            Also jetzt habe ich z.B 20 User in der Tabelle users drin. In der Tabelle logmail sind mehrere Datensätze drin, womit ich die max Anzahl an eMails ermitteln kann, die ein User schon bekommen hat.

                            Nun möchte ich z.B einfach alle user aus der Datenbank zählen oder ausgeben, bei denen mail_woche kleiner ist, als ihre max Anzahl an eMails in logmail.

                            Also gibt der User an er möchte 20 eMails in der Woche bekommen, steht in mail_woche 20 drin. Deswegen muss er die Anzahl in logmail zählen und prüfen ob mail_woche < max(logmail).


                            So hoffe mal damit ist geholfen, denn ich bekomme es nicht auf die Reihe und das echt seit Tagen. Am besten wären irgendwelche Beispiele

                            Danke

                            Kommentar


                            • #15
                              poste mal bitte nen tabellendump. danke.

                              definition tabellendump: eine aneinanderreihung aller sql-befehle, die nötig sind, um die tabelle zu erzeugen und mit daten zu füllen.
                              Zuletzt geändert von derHund; 07.08.2004, 07:29.
                              Die Zeit hat ihre Kinder längst gefressen

                              Kommentar

                              Lädt...
                              X