Problem beim Datenbankdesigns eines Newsscripts

aYco

Grünschnabel
Hi,
also ich hab folgendes Problem:
Ich hab für das Script drei Tabellen gemacht....
news
news_kommentare
news_kats

Damit der User immer Newskathegorien löschen bearbeiten und hinzufügen
kann hab ich halt die kats Tabelle gemacht...jede Kathegorie hat also eine
id und in der Newstabelle gibt es eine "kat_id"-Spalte.
Mein Problem ist es jetzt hinzukriegen, dass bei der mysql Abfrage für die News
mit der kat_id des jeweiligen Eintrags die Kathegorie für die News automatisch mit abgefragt wird.

Dazu sagen sollte ich noch sagen, dass ich mit der smarty-Templateklasse arbeite.
In die while-schleife der news-Abfrage eine zweite Abfrage einzubauen klappt nicht so ganz.
Würd mich freuen wenn ein paar Lösungsvorschläge kämen! :)
Könnt euch auch mal den Quelltext angucken.
Ist das erste mal das ich mit Templates arbeite, könnte also auch daran liegen:( !

php-code:
Code:
$smarty = new Smarty;

$con = mysql_connect ($dbhost, $dbuser, $dbpass) OR DIE ("Can't connect to database");
@mysql_select_db ($db, $con);
$query = "SELECT * FROM oc_news ORDER BY news_id DESC";
$result = mysql_query ($query, $con);

$news = array();

while ($rows = mysql_fetch_array($result)) 
  {
   array_push ($news, $rows);
   $katid = $rows["news_kat"];
   $con2 = mysql_connect ($dbhost, $dbuser, $dbpass) OR DIE ("Can't connect to database");
   @mysql_select_db ($db, $con2);
   $query2 = "SELECT * FROM oc_news_kats WHERE news_kat_id='$katid'";
   $result2 = mysql_query ($query2, $con2);
   
   $kat = array();
   
   while($rows2 = mysql_fetch_array($result2))
    {
    array_push($kat, $rows2);
    }
   
  }
  
$smarty->assign ('news', $news);
$smarty->assign ('kat', $kat);

//index.tpl parsen
$smarty->display('news/index.tpl');

tpl-code:
Code:
{section name=news loop=$news}
<table class=newskasten width=90% align=center cellpadding=0 cellspacing=0>
<tr>
<td bgcolor=#666666>
{$news[news].news_titel} von {$news[news].news_autor} geschrieben am {$news[news].news_datum} um {$news[news].news_zeit}
</td>
<td bgcolor=#666666>
</tr>
<tr>
<td bgcolor=#333333>
<font class=news>{$news[news].news_text}</font>
{if $news[news].news_mehr == ""}	
{else}
<a href=news.php?action=2&nid={$news[news].news_id}><br>Mehr lesen...</a>
{/if}
</td>
<td align=right bgcolor=#333333>
{section name=kat loop=$kat}
{$kat[kat].news_kat_name}<br><img src={$kat[kat].news_kat_bild}></img>
{/section}
</td>
</tr>
<tr>
<td align=right bgcolor=#666666>
</td>
<td align=right bgcolor=#666666>
<a href=news.php?action=3&nid={$news[news].news_id}>Kommentare({$news[news].news_kommentare})</a>
</td>
</tr>
</table>
<br>
{/section}
 
Original geschrieben von aYco
Mein Problem ist es jetzt hinzukriegen, dass bei der mysql Abfrage für die News
mit der kat_id des jeweiligen Eintrags die Kathegorie für die News automatisch mit abgefragt wird.
Das Zauberwort hierfür heisst: Joins! Da Du ja schon richtigerweise die beiden Tabellen mittels der Id der jeweiligen Kategorie richtig in Beziehung zu einander gesetzt hast, musst Du jetzt das gleiche auch beim auslesen der Daten machen.

Für das Beispiel gehe ich mal von folgendem Design der beiden Tabellen aus:

Code:
t_news
    + id
    + cat_id
    + headline
    + nachricht
    + datum

t_cat
    + id
    + name
Ich denk mal, die Bezeichnungen der Spalten sind selbsterklärend ;)

Wenn Du jetzt alle News (inkl. der Bezeichnung der jeweiligen Kategorie) auslesen willst, dann verknüpfst Du die beiden Tabellen über die cat_id / id Spalte. Das war die Theorie, in der Praxis sieht das ganze so aus:

PHP:
$strSQL =   "SELECT ".
                "news.id, ".
                "news.cat_id, ".
                "news.headline, ".
                "news.nachricht, ".
                "news.datum, ".
                "cat.name ".
             "FROM ".
                "t_news news ".
             "INNER JOIN ".
                "t_cat cat ".
             "ON ".
                "news.cat_id = cat.id ".
             "ORDER BY ".
                "news.datum DESC";
Jetzt musst Du das ganze Recordset nur noch durchlaufen und ein assioziatives-Array erstellen und das wiederum mittles

PHP:
$smarty->assign("news", $arrNews);
dem Template zuweisen.
 
hi,
jo besten dank...jetzt hoff ich nur mal das das auch funktioniert!
gleich ma ausprobieren:)
 
Juhu funktioniert perfekt!:-)
Falls du zufällig auch noch weißt wie ich am besten einen Forumlogin
mit dem auf meiner Seite verknüpfe, also dass man sich auf der Seite
anmeldet und somit auch gleich im Forum und umgekehrt, dann kannste das liebend gerne hier noch hinschreiben:eek: !
Hab erst selber nen Forum geschrieben aber das is mir zu umständlich noch mod Funktionen usw. zu schreiben deshalb wollt ich nen fertiges einbinden, wie z.B. auf mychanges.de . aber die wollen mir den code net geben:(

bye
 
--> http://www.phpBB.de

// Nachtrag: Das Forum legt seine Benutzer in einer Datenbank ab. Die Tabellen sind dokumentiert, so dass Du schnell herausfinden solltest, wo was abgespeichert wird. Wenn Sich jemand auf Deiner Seite registriert musst Du nur noch zusätzlich die Benutzer-Tabelle des Forums ändern, damit der Benutzer gleichzeitig für das Forum freigeschaltet wird.

snuu
 
Zuletzt bearbeitet:
Nene, so hatte ich das net gedacht...
es sollen eher beide logins die selbe datenbank nutzen!:-)
ne aber danke für den tipp mit der tabellen doku!
vielleicht krieg ichs ja jetzt so hin...fänds aber hilfreicher, wenn jemand, der das
schonmal erfolgreich gemacht hat, seine codes hier hinschreibt, also für den seitenlogin!
danke im voraus!
 
Guckmal, inwiefern dein Problem mit Sessions zu lösen wäre, in dem du in die Session etwas reinschreibst das dem Login sagt, dass du eingeloggt bist. Sobald man das Forum aufgerufen wird die Session einfach mitgenommen und das Forum liest die Session aus und sieht "Aha, der ist eingeloggt, also darf er auch hier rein". Tutorials dazu gibt es ja genug.
 
Zurück