Auf Newsübersicht wird nur die aktuellste News ausgegeben

Gifty43

Erfahrenes Mitglied
Moin Zusammen

Ich habe folgendes Problem, und zwar habe ich ein Newsscript (Übersichtsseite) mit den folgenden Tabellen:

script_cat (cat_id, name, ...)
script_lang (langid, langname, ...)
script_news (newsid, title, text, ...)
script_newsdetail (newsid, srcid)
script_source (srcid, catid, langid, name, ...)

Diese will ich nun in einer mit Array's verschachtelten Abfragen ausgeben. Dazu habe ich das folgende Script geschrieben. Die Ausgabe der Newstitel (mehr hab ich aus Testgründen nicht eingetragen) funktioniert zwar, jedoch nur der aktuellste (ASC-Order)

Man kann oben auf der Seite auswählen, welche Kategorie, bzw. Sprache man angezeigt haben will, deswegen das: AND catid='$category' AND langid='$language'

PHP:
 <?php
 
 $query0 = mysql_query("SELECT * FROM script_newsdetail ORDER BY newsid ASC");
 while($data0 = mysql_fetch_array($query0)) {
 
 $query1 = mysql_query("SELECT * FROM script_source WHERE srcid = ".$data0['srcid']." AND catid='$category' AND langid='$language'");
 while($data1 = mysql_fetch_array($query1)) {
 
 $query2 = mysql_query("SELECT * FROM script_newsdetail WHERE srcid = ".$data1['srcid']." AND newsid = ".$data0['newsid']."");
 while($data2 = mysql_fetch_array($query2)) {
 
 $query = mysql_query("SELECT * FROM script_news WHERE newsid=".$data2['newsid']." ORDER BY newsid ASC");
 while($data = mysql_fetch_array($query)) {
 
 echo '<p align="center>'.$data["title"].'</p>';
 
 }
 }
 }
 }
 ?>

Was mache ich hier falsch, bzw. wie bekomme ich alle Titel ausgegeben, und nicht nur der aktuellste?

Solltet ihr fragen haben, könnt ihr diese ungehindert hier rein posten. Ansonsten wär ich froh, wenn ihr mir helfen könntet.

Greetz
Gifty
 
Am besten ist es, du legst die DB-Tabelle so an, das alle Daten der News in einer Tabelle sind. Dann hast du diesen query-Salat nicht und zudem müsstest du keine Joins ansetzen.

Das Formular muss dann für die Eingabe nach Sprache sortiert angegeben werden. Ergo - wenn engl. dann wird eben für die Übergabe eine 2 gesetzt weil beispielsweise 1 für deutsch steht usw.. Das wäre dann die lange_id in der Tabelle und entsprechend in der Ausgabe dargestellt.
 
Ok, auch wenn du der Meinung bist, es muss so sein (wobei es so nicht sein muss) - was ist das Hauptkritierum?

Es geht um die Bildung eines JOINS. Seh dich mal bei http://www.mysql.de um bzgl. JOINS.
 
Es muss so sein. Für jede Source gibt es unterschiedliche Sprachen und Kategorien. Ich will net in jeder News die Sprache bzw. die Kategorie neu angeben. Weil das für die Source wo die News drin iss, immer gleich iss.

Das mit dem Join leuchtet mir noch net so ganz ein, wieso mir das helfen könnte.
Ich mache ja eine Abfrage über mehr als 3 Tabellen.

Kann niemand den Fehler im Code sehen?
Hängt es vielleicht irgendwie mit LIMIT zusammen?
 
Hat wirklich niemand eine Idee was ich da falsch gemacht habe?

Ich meine er holt die richtigen Datensätze, zeigt aber nur den aktuellsten an...
 
Es geht ja nicht NUR um den Titel, ich hab den nurmal zum Testen eingebaut.

Ich hab mich jetzt auch mal mit Join beschäftigt und folgenden Code gebastelt:
PHP:
 $query = mysql_query("
 SELECT 
 			n.newsid,
 			n.title,
 			n.time,
 			d.newsid,
 			d.srcid,
 			s.srcid,
 			s.catid,
 			s.langid,
 			s.name,
 			s.url,
 			l.langid,
 			l.name,
 			c.catid,
 			c.name
 		FROM 
 			script_news AS n,
 			script_newsdetail AS d,
 			script_source AS s,
 			script_lang AS l, 
 			script_cat AS c
 		WHERE
 			(n.newsid = d.newsid AND d.srcid = s.srcid  AND s.catid = c.catid AND s.langid = l.langid)
 			AND
 			s.catid='$category' AND s.langid='$language'
 		ORDER BY
 			n.newsid DESC
 ");
 while($data = mysql_fetch_array($query)) {
 
 echo '
 
 <p align="center>'.$data["title"].'</p>
 
 ';
 
 }

Komme jedoch immernoch auf das gleiche Ergebnis -> Es wird nur EIN Eintrag angezeigt, nicht alle...

Habt ihr sonst noch irgendeine Idee?

Gruss
Gifty
 
Och kommt schon Leute. Auch wenns nur n kleiner Tipp ist. Immerhin wird ja das richtige ausgegeben, halt nur das neuste und nicht alles.
 
Ok, in deinem Join und Select sind Dinge enthalten welche für die Ausgabe nicht notwendig sind. Das ist das eine und das andere - lass mal Order by weg. Die News werden ja ein Datum haben und wenn du das im Join berücksichtigst, werden diese auch nach Datum ausgegeben.
 
Zurück