Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

MYSQL schleife in schleife

Hallo
ich möchte für ein Forum die Antwortenanzahl berechnen...

Allerding muss diese aus der Datenbank "antworten" genommen werden, während das thema in der Datenbank "thema" steht

Also um das Thema anzeigen zu lassen benutze ich folgenden Code:

        $abfrage = @ mysql_query("SELECT * FROM thema ORDER BY id DESC LIMIT $start,$post_pro_site")or die("Konnte den SELECT-Befehl nicht ausführen!!!");
        while($eintraege = mysql_fetch_object($abfrage)) {

        echo "<table class=\"GBtable\" width=\"80\" border=\"0\"  cellpadding=\"5\"  align=\"center\">";
        echo "<tr>";
        echo "<td colspan=\"3\" class=\"GBhead\"><span><b class=\"ul_fett\">Thema:<< </b> <b class=\"ul\"><a href=\"index.php?thema=6&inhalt=2&id=".$eintraege->id."\">".$eintraege->head."</a>>><b></span></td><br> ";
        echo "</tr><tr>";
        echo "<td><span><b class=\"ul_fett\">Am </b> <b class=\"ul\">".$eintraege->datum."</b> um <b class=\"ul\">".$eintraege->uhrzeit."</b></span></td>";
        echo "<td width=\"20\">";
        echo "</td>";
         echo "</tr>";
        echo "<tr>";
        echo "<td  colspan=\"3\" border=\"2px\" >  <b class=\"ul\">      Von: ".$eintraege->name."</b></td>";
         
        echo "</tr>";
        echo "</table><br>";

        }
        @mysql_free_result($abfrage);

so jetzt muss ich da irgendwie noch eine schleife reinbekommen das die andere Datenbank mit einbezihet nur wie??


Wäre für jeden Tipp dankbar


der_webi

Antworten zu MYSQL schleife in schleife:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Eine andere Datenbank willst du einbeziehen? Was hast'n du fürn krasses Forum?? ;D

Schonmal in die MySQL-Doku reingeschnüffel? Da stößt man mitunter auf solche lustigen Funktionen wie count(). Da kann man sich auch gleich was zusammenzählen lassen, und der SELECT gibt die gewünschte Zahl zurück ;)

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Eine andere Datenbank willst du einbeziehen? Was hast'n du fürn krasses Forum?? ;D




Joa also ich habe 2 Datenbanken eine für die Antorten und eine für die Themen...

Jetzt sollen die Antworten gezählt werden und dann als Zahl neben dem Thema angezeigt werden, also muss ich wohl eine neues Spalte in der Tabelle "thema" anlegen und dann 
dort die anzahl der antworten eingebnn ;D;D


 :'( es hätte ja auch sein können das ich einfach den Wert  aus der anderes Tabelle "antworten" nehmen kann

also  und dann mit count()  (was ich übrings sehr wohl wusste :P)


naja dann halt nicht ;D;D


der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Joa also ich habe 2 Datenbanken eine für die Antorten und eine für die Themen...

Hätten's nicht auch 2 Tabellen getan? ;D

Übrigens versteh' ich bei deinem letzten Beitrag nur Bahnhof.
Falls noch Fragen aufkommen, kannst du diese ja vorteilhafterweise mal mit einem Fragezeichen kenntlich machen, dazu gibbs das nämlich ;)

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

ALSO

JA 2 Datenbanken mit jeweils einer Tabelle ;);), war allerdings mehr zufall das das so gekommen ist ;)

SO

MEINE FRAGE:

Kann ich nicht einen Wert( bzw danach die Anzahl der Werte )   
aus der einen Tabelle aufrufen/anzeigen in einer Schleife , die die andere Tabelle ausgibt *?*   :P;D;D;D

DER SINN DES GANZEN:

Ich habe wie gesagt eine Tabelle die die Antworten speichert und eine die das Thema speichert.

So ich möchte das Thema ausgeben und neben das THEMA die Anzahl der Anwtorten schreiben, dazu muss ich ja dann auf die andere Tabelle zugreifen...

der_webi

PS: Ich hab mir meinen letzten Eintrag noch mal durchgelesen und habe mir überlegt das ich dadraus wahrscheinlich auch nichts verstanden hätte :-[:-[

Naja jetzt bin ich wach und voll Energie ;D;D

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Mal ein kleiner Denkanstoß. Die Einträge in einer Tabelle könnte man mit folgender Funktion ermitteln:


// Zählt alle Einträge in einer Tabelle
function countMembers($table)
{
   $connection=openDataBase();

   $query="SELECT count(*) FROM ".$table;
   // Execute the query
   if (!($result = mysql_query($query, $connection))) showerror();
   $anz=mysql_fetch_array($result);
   mysql_close($connection);
   return($anz[0]);
}

Natürlich müßte das Ganze an die jeweiligen Bedürfnisse angepasst und Routinen wie 'openDataBase()' und 'showerror()' müssen auch definiert werden.

Ein MySQL Manual hilft da sicherlich...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Danke
aber ich glaube ich versuche es auf eine ander Weise.
Ich werde einfach bei der tabelle mit den "themen" eine neue spalte in der ich dann bei jeden eintrag einfach die anzahl der einträge in der tabelle "antworten" erhöhe


Naja ich versuch es einfach mal an

der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Sorry webi, aber deine Vorgehensweise geht einfach so nicht.

Hast du dir schonmal Gedanken darüber gemacht, warum MySQL ein relationales Datenbanksystem ist? Genau, weil es dort Relationen gibt.
Zum Beispiel zwischen Themen und Beiträgen. Jedem Thema sind Beiträge zugeordnet. Man kann sowas über einen Fremdschlüssel verknüpfen, um die Beziehung eindeutig zu identifizieren. Sowas geschieht zwischen verschiedenen Tabellen einer Datenbank. Wie willst du das handhaben, wenn sich deine Beiträge in einer anderen Datenbank befinden als deine Themen? Mit ein wenig Bastelei geht's vielleicht. Aber Sinn macht's absolut nicht.

Mal als kleiner Anstoß, um dir etwas Motivation zum Umdenken zu geben: wenn riesige Content-Management-Systeme wie Typo3 mit EINER Datenbank auskommen, solltest du das für dein Forum doch auch möglich machen können, oder? ;)

Und bevor die Struktur nicht stimmt, brauchst du dir um Beitragszählungen keine Gedanken zu machen.

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Dankeschön

Dann versuche ich das mal so umzubasteln das eine Datenbank ausreicht, dann dürfte es auch nichtmehr so schwer sein zu errechnen wieviel Beiträge dortdrin enthalten sind..


So auf jeden Fall besten Dank für die kleine nachhilfestunde in Sachen MYSQL- Verwendung ;D


der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Jo, dann mach mal :)

Und bevor du deine DB umbaust, zieh' dir mal das hier rein. Da bekommst du relativ kurz und knapp beschrieben, wie die Struktur aufgebaut sein sollte.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Also

Ich habe da noch eine Frage und zwar:

Ist die aufteilung von mir denn sinnvoll:

also eine Tabelle für die Themen und eine Tabelle für die Antworten?
Allerdings muss ich dann ja auf eine andere Tabelle( antowrten) zugreifen wenn ich diese zählen will und neben den Themen anzeigen will.

Versteht ihr wie ich das meine?
Dann muss ich ja wieder eine Schleife in einer Schleife machen , damit das geht.


Vielen Dank schonmal

der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Natürlich ist das sinnvoll. Oder anders: beides in einer Tabelle wäre sinnlos. Weil: Redundanz! Du hättest dann in jedem Record nochmal den Titel des Themas mit drinstehen.

Hast das Wikipedia-Dokument nicht gelesen, oder? ;)

Ich versteh' aber ehrlich gesagt immer noch nicht, was du immer mit deinen Schleifen machen möchtest. Konzentriere dich erstmal auf das SQL-Statement, denn das ist die halbe Miete.

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

A


Hast das Wikipedia-Dokument nicht gelesen, oder? ;)


Doch :-[
ich habe es gerade überflogen
ziemlich viele Fachbegriffe davon bin ich eigentlich nicht so der Freund , aber ich bekomm das gleich schon hin






Ich versteh' aber ehrlich gesagt immer noch nicht, was du immer mit deinen Schleifen machen möchtest. Konzentriere dich erstmal auf das SQL-Statement, denn das ist die halbe Miete.


Also das mit dem Mysql war einfach , as hatte ich ja schon nur halt auf 2 datenbanken verteilt...

Ich erläutere jetzt mal den aufbau:

Also ich habe ein Tabelle "thema" :

und hier stehen der erste beitrag, also der Anfangsbeitrag drin
dann die Überschrift des Themas
der Autor
und ein Feld ist id , damit ich genau identifizieren kann


 Dann habe ich eine Tabelle "antworten"

Hier werden  alle Antworten zu  jedem Thema hereingeschrieben

Bei jeder Anwort wird die ID des themas in ein Feld geschrieben, sodass ich sie später ausgeben kann



So jetzt zu dem Forum:

1.Auf der Startseite gebe ich alle Themen aus der Datenbank aus und hier wählt man sich da eines aus

2. dann hat man sich das thema ausgewählt und  sieht nun alle beiträge zu diesm Thema, die ich ja mit der gespeicherten id des forums ausgeben kann ( mit WHERE )
-aus der tabelle "antworten"

3.nun kann man dort auch einen beitrag verfassen und dort wird dann halt die id des themas gespeichert , allerdings in die tabelle "antworten"


So wie man ein neues Thema verfasst spielt alles keine Rolle!!!



meine Frage:

Wie kann ich auf meiner Startseite , wo die Themen angezeigt werden , die Anzahl der Anworten anzeigen lassen?

dafür müsste ich auf eine andere Tabelle zugreifen und bräuchte somit eine Schleife in einer Schleife ;D;D;D


der_webi


PS: Ich hoffe ich habe jetzt nicht zuviel falsch gemacht, aber ich werde  nun das Wikipedia - Dokument lesen, ich abe aber erst gebastelt und dann hier wieder Ins Forum geschaut

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Also ich habe ein Tabelle "thema" :

und hier stehen der erste beitrag, also der Anfangsbeitrag drin
dann die Überschrift des Themas
der Autor
und ein Feld ist id , damit ich genau identifizieren kann

Genau da liegt noch ein grundsätzlicher Denkfehler. Warum schreibst du den Anfangsbeitrag (also die Frage, oder wie auch immer) mit in die Themen-Tabelle? Ein Beitrag, ob's nun der erste ist oder eine Antwort, ist immer noch ein Beitrag. Somit hat der in der Tabelle "Themen" nichts verloren. Könnte doch sein, du lässt dir zum Objekt "Beitrag" mal noch paar andere Eigenschaften einfallen, die du abspeichern willst. Speicherst du die dann auch nochmal für den ersten Beitrag separat in "Themen"? Ist denke ich einzusehen, dass das ** Netiquette! ** ist, oder? ;)

Ansonsten hast du das aber schon ganz richtig erkannt mit dem Fremdschlüssel, mit dem du den Beiträgen das Thema zuordnest.

So, und nun zum Zählen der Beiträge (ohne Schleife!):

Ich hab mal anhand meines Forums ein ganz primitives SQL-Statement erstellt, was genau das macht, was du haben willst, nämlich alle vorhandenen Themen auslesen und dazu die Anzahl der Antworten zählen und mit zurückliefern:

SELECT threads.title, count( thread_id ) AS num_posts
FROM threads, posts
WHERE posts.thread_id = threads.id
GROUP BY threads.title

Tabellennamen und Felder sind in Englisch, sollte aber zu verstehen und auf dein Modell übertragbar sein, oder? :)

Dann viel Spaß _ohne_ die Schleife in der Schleife ;D

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo
Tut mir leid ich kapier das immer noch nicht!!!

Ich brauch doch dann eine neue schleife, oder?

        $abfrage = @ mysql_query("SELECT *  FROM thema ORDER BY id DESC LIMIT $start,$post_pro_site")or die("Konnte den SELECT-Befehl nicht ausführen!!!");
        while($eintraege = mysql_fetch_object($abfrage)) {

        echo "<table class=\"GBtable\" width=\"80\" border=\"0\"  cellpadding=\"5\"  align=\"center\">";
        echo "<tr>";
        echo "<td colspan=\"3\" class=\"GBhead\"><span><b class=\"ul_fett\">Thema:<< </b> <b class=\"ul\"><a href=\"index.php?thema=6&inhalt=2&id=".$eintraege->id."\">".$eintraege->head."</a>>><b></span></td><br> ";
        echo "</tr><tr>";
        echo "<td><span><b class=\"ul_fett\">Am </b> <b class=\"ul\">".$eintraege->datum."</b> um <b class=\"ul\">".$eintraege->uhrzeit."</b></span></td>";
        echo "<td width=\"20\">";
        echo "</td>";
         echo "</tr>";
        echo "<tr>";
        echo "<td  border=\2px\" >  <b class=\"ul\">      Von: ".$eintraege->name."</b></td>";
         echo "<td  border=\2px\" >  <b class=\"ul\">Zahl</b></td>";
        echo "</tr>";
        echo "</table><br>";

        }
        @mysql_free_result($abfrage);


Ich kann doch oben jetzt nicht einfach deinen code einfügen dann funktioniert doch die Ausgabe nicht mehr!?

Ich brauch an der Stelle wo ich die Anzahl haben will eine neue Schleife, oder nicht?


vielen Dank schonmal und nochmal für deine Bemühungen

der_webi

« HTML-Tabelle Struktur ändernBild wird nicht vollständig angezeigt »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...