2 Mysql Abfragen in Smarty

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

  • 2 Mysql Abfragen in Smarty

    hi

    Also ich habe folgendes Problem.
    Ich werde das mit nested sets nicht machen, da ich das System noch nicht ganz verstehe und das auch funktioniert und für meine Zwecke reicht.
    Also:

    ICh möchte eine Kategorie auslesen und darunter die Dazugehörigen Foren.
    Dies habe ich bis jetzt immer so gemacht :
    PHP-Code:
    <?php
    $query_c 
    mysql_query("SELECT catname, catid FROM cats ORDER BY sort ASC") or die(mysql_error());
    while(
    $row_c mysql_fetch_array($query_c))
    {
    $catsid $row_c['id'];

    $query_f mysql_query("SELECT forumsname, forumsdesc, forumsid FROM cats ORDER BY sort ASC") or die(mysql_error());
    while(
    $row_f mysql_fetch_array($query_f))
    {

    ......

    }
    }



    ?>

    Und das hat eigentlichg immer super geklappt.
    Nur jetzt möchte ich dies mit Smarty realisieren.
    Ich hab es schon so probiert:

    PHP-Code:
    <?php

    include("lib/config/mysql.php");

        
    error_reporting(E_ALL);
        
    define('SMARTY_DIR'$_SERVER['DOCUMENT_ROOT'].'/Boardsystem/lib/templates/');

        require(
    SMARTY_DIR.'Smarty.class.php');


        
    $smarty = new Smarty;


        
    $cats_query mysql_query("SELECT * FROM cats ORDER BY sort ASC") or die(mysql_error());
        
    $cats = array(); // leeres Arrayelement erzeugen
        
    while($cats_row mysql_fetch_array($cats_query))
        {
            
    $cats[] = $cats_row;
            
            
    $catsid $cats_row['id'];
            
            
    $forums_query mysql_query("SELECT * FROM forums WHERE catsid = '$catsid' ORDER BY sort ASC") or die(mysql_error());
            
    $forums = array();
            while(
    $for mysql_fetch_array($forums_query))
            {
             
    $forums[] = $for;
        

            }
            
            
        }

        
    $smarty->assign('cats'$cats); // In Smarty speichern
        
    $smarty->assign('foru'$forums);


        
    $smarty->display('forums/forums.tpl');

    ?>
    Und die TPL datei:

    Code:
    <div align="center">
      <table width="95%"  border="0" cellspacing="1" cellpadding="1">
        <tr bgcolor="#666666">
          <td width="3%"><div align="center"></div></td>
          <td width="40%"><strong> Foren</strong></td>
          <td width="11%"><div align="center">Beitr&auml;ge</div></td>
          <td width="11%"><div align="center">Themen</div></td>
          <td width="20%"><div align="center">Letzter Beitrag </div></td>
          <td width="15%"><div align="center">Moderatoren</div></td>
        </tr>
    	{foreach from=$cats item=cats_item}
        <tr bgcolor="#999999">
          <td colspan="6">- {$cats_item.catname} </td>
        </tr>
    	
    	{foreach from=$foru item=forums}
        <tr bgcolor="#CCCCCC">
          <td></td>
          <td>{$forums.forumsname}</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
    	
    	{/foreach}
    	{/foreach}
      </table>
    </div>


    Nur leider gibt es damit immer falsch aus und werden nur die Foren aus der 2ten Kategorie genommen .


    Wie kann ich das machen ?


    Gruß Simon

  • #2
    Keiner eine Idee ?
    Oder kennt jemand eiN Smarty Forum ?
    Ich hab gegoogelt aber irgednwie nichts gefunden

    Kommentar


    • #3
      Keiner eine Idee ?
      meinst du nicht, dass du mit deiner nachfragen nach ERST 3h ein wenig drängelst?


      abgesehen davon ... warum arbeitest du nicht mit JOINs?
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        HI

        Sry, dass ich gedrängelt habe aber mein Thema war schon fast nicht mehr auf der 1ten Seite und fast niemand sieht sich Themen/Beiträge an die im Forum nicht atuell sind.

        Hmmm wie funktioniert das mit Joins ?

        Hab schon gegoogelt aber finde nur, dass Joins irgendwas ähnliches wie Implode ist/sind

        gruß SimonErich

        Kommentar


        • #5
          ehm es geht um sql inner/left joins. siehe sql forum für beispiele. und ist die mehrzahl von forum nicht foren? ;-)

          Kommentar


          • #6
            war schon fast nicht mehr auf der 1ten Seite
            na und?

            nun stelle dir mal vor die du nun verdrängt hast, machen das auch. was dann? alle wollen auf die erste seite.

            merke: "nicht drängeln!"
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Hi ich hab jetzt mal die Smarty Docu durch gesehen und bina uf was gestoßen.
              Da steht , dass es in Smarty eine Funktion gibt mit der ich nested Sections machen kann.
              Nur da steht es nur für Arrays.
              und leider sehr ungenau.

              Hier mal ein Ausschnitt.


              PHP-Code:
              {* Sections können unbegrenzt tief verschachtelt werden.
                 
              Mit verschachtelten 'sections' können Sie auf komplexe Datenstrukturen
                 zugreifen 
              (wie zum Beispiel multidimensionale Arrays). Im folgenden Beispiel
                 ist $contact_type
              [customerein Array mit Kontakttypen des aktuellen Kunden. *}
              {
              section name=customer loop=$custid}
                  
              id: {$custid[customer]}<br>
                  
              name: {$name[customer]}<br>
                  
              address: {$address[customer]}<br>
                  {
              section name=contact loop=$contact_type[customer]}
                      {
              $contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
                  {/
              section}
                  <
              p>
              {/
              section}


              AUSGABE:

              id1000<br>
              nameJohn Smith<br>
              address253 N 45th<br>
              home phone555-555-5555<br>
              cell phone555-555-5555<br>
              e-mail: [email]john@mydomain.com[/email]<br>
              <
              p>
              id1001<br>
              nameJack Jones<br>
              address417 Mulberry ln<br>
              home phone555-555-5555<br>
              cell phone555-555-5555<br>
              e-mail: [email]jack@mydomain.com[/email]<br>
              <
              p>
              id1002<br>
              nameJane Munson<br>
              address5605 apple st<br>
              home phone555-555-5555<br>
              cell phone555-555-5555<br>
              e-mail: [email]jane@mydomain.com[/email]<br>
              <
              p
              Naja aus einem anderen Tutorial hab ich herausgefunden, dass man diese Sections wie folgt bestimmt:

              PHP-Code:
              $smarty->assign('name'$array); 

              Nun hab ich es mal so probiert:


              Index.php
              PHP-Code:

              $catlooparray 
              = array();

              $query mysql_query("SELECT catname, id FROM cats ORDER BY sort") or die(mysql_error());
              while(
              $row mysql_fetch_array($query)){
              // assign an array of data
              $catlooparray[] = $row['catname'];

              $cats_id $row['id'];

              $forumslooparray = array();

              $query_f mysql_query("SELECT forumsname, id FROM forums WHERE cats_id = '$cats_id' ORDER BY sort") or die(mysql_error());
              while(
              $row_f mysql_fetch_array($query_f)){
              // assign an array of data
              $forumslooparray[] = $row['forumsname'];
              }


              }
              $smarty->assign('catloop'$catlooparray);
              $smarty->assign('forumsloop'$forumslooparray); 

              index.tpl


              PHP-Code:

              <table>
              {
              section name=mysec loop=$catloop}
                <
              tr bgcolor="#e7e7e7">
                  <
              td>id: {$catloop[mysec]}&nbsp;</td>
                  <
              td>&nbsp;</td>
                  <
              td>&nbsp;</td>
                  <
              td>&nbsp;</td>
                </
              tr>
                {
              section name=forums loop=$forumsloop}
                <
              tr bgcolor="#0033CC">
                  <
              td>{$forumsloop[forums]}jo</td>
                  <
              td>&nbsp;</td>
                  <
              td>&nbsp;</td>
                  <
              td>&nbsp;</td>
                </
              tr> {/section}
              {/
              section}
              </
              table



              Doch da kommt leider auch nicht mehr als nur die Kategorien.
              Weiss jemand was an diesem Code nicht stimmt oder wie es funtzt ?


              Gruß Simon

              Kommentar


              • #8
                (Warum benutzt du nicht Join?)²

                Wenn man schon mysql_fetch_array benutzt, und zu faul ist, selbst ein array aufzubauen, sollte man wenigstens in der Template

                Code:
                <td>id: {$catloop[mysec].id}&nbsp;</td>
                benutzen. Also: *.arrayschlüssel.


                (Warum benutzt du nicht Join?)³


                Außerdem solltest du
                PHP-Code:
                while($row mysql_fetch_array($query)){
                // assign an array of data
                $catlooparray[] = $row;
                $forumslooparray = array(); 
                es so machen. Und dem zu folge kann das hier ja gar nicht gehen

                PHP-Code:
                while(--->$row_f<--- = mysql_fetch_array($query_f)){
                // assign an array of data
                $forumslooparray[] = $row--->?_f?<---['forumsname'];

                Aber auch das, solltest du in

                PHP-Code:
                while($row_f mysql_fetch_array($query_f)){
                // assign an array of data
                $forumslooparray[] = $row_f;

                ändern.


                Hat dich schon wer gefragt, warum du nicht JOIN benutzt?
                Zuletzt geändert von xManUx; 19.07.2005, 04:15.

                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Kommentar

                Lädt...
                X