Gå til innhold

Hente data fra flere tabeller


Anbefalte innlegg

Holder på med et forum og har kommet til et punkt hvor jeg ikke har så mye erfaring. Nemlig det å skulle hente ut data fra flere tabeller med færrest mulig queries.

 

Skal pøve å forklare så godt jeg kan:

 

Mitt forum har 3 kategorier som ligger i en tabell som heter psfxs_categories. Informasjonen er fordelt på disse feltene: id, title, order_id.

 

Når jeg designet siden uten å tenke så mye over optimalisering så brukte jeg denne sql spørringen:

 

// Select all categories
$cat_query = "SELECT * FROM psfxs_categories ORDER BY order_id ASC";
$cat_results = mysql_query($cat_query) or die(mysql_error());
$cat_totals = mysql_num_rows($cat_results);

 

Og for å vise kategoriene sammen med underforumene brukte jeg denne koden:

(Den er nok litt rotete, men det er fordi den kun skal gi et innblikk i hvordan designet skal se ut)

Klikk for å se/fjerne innholdet nedenfor
 <?php
while($cat_rows = mysql_fetch_array($cat_results)){      
$cat_name = $cat_rows["title"];
$cat_id = $cat_rows["id"];

echo " <tr>
   <td colspan='4' class='forum-class5'>$cat_name</td>
   </tr><tr>
   <td align='center' class='forum-class3'></td>
   <td class='forum-class3' width='70%'><span class='top-forum-desc'>Board Name</span></td>
   <td class='forum-class3'><div align='center'><span class='top-forum-desc'>Posts</span></div></td>
   <td class='forum-class3'><div align='center'><span class='top-forum-desc'>Topics</span></div></td>
 </tr>";


$subforum_query = "SELECT * FROM psfxs_forums WHERE cat_id = '$cat_id' ORDER BY forum_order ASC";
$sfq_res = mysql_query($subforum_query);
while($sfq_rows = mysql_fetch_array($sfq_res)){

$forum_name = $sfq_rows["forum_name"];
$forum_posts = $sfq_rows["forum_posts"];
$forum_topics = $sfq_rows["forum_topics"];

echo "<tr>
   <td align='center' class='forum-class1'>#</td>
   <td class='forum-class1' width='70%'><span class='main-forum-link'><a href='/?page=forums&act=board&board_id=$forum_id'>$forum_name</a></span>
<br/>
<span class='faded-forum-text'>New:</span> ";




echo "</td>
   <td class='forum-class1'><div align='center'>$forum_posts</div></td>
   <td class='forum-class1'><div align='center'>$forum_topics</div></td>
 </tr>";

}


}

 

Dette ser da slik ut (Akkurat slik jeg vil ha det):

 

tb_7696930.jpg

 

Problemet er at jeg har sql spørringer inne i while loopen, noe som gir mange og unødvendige (?) spørringer.

 

Det jeg lurer på er om det er mulig å gjøre dette på en annen måte, slik at jeg kun trenger en, to eller tre spørringer?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

INNER JOIN :love:

 

SELECT cat.id, cat.title, ps.forum_name, ps.forum_posts,ps.topics FROM psfxs_categories AS cat INNER JOIN psfxs_forums AS ps ON ps.cat_id=cat.id ORDER BY cat.order_id ASC, ps.forum_order ASC

Utestet, men tror (og håper) at den skal funke ;)

Lenke til kommentar
Høres ut som det er det som trengs. :)

 

Men du kunne ikke skrive om den koden jeg bruker slik at det funker som det skal ved bruk av INNER JOIN?

 

Jeg er litt usikker på hvordan jeg skal få echoet ut informasjonen slik som den vises på bildet. Hvis du skjønner?

9505339[/snapback]

Slå opp i mysql-manualen på join. Kjør spørringen i en terminal eller mysql query administrator (lastes ned fra mysql.com) så du ser hva som egentlig kommer ut.

Du lærer ikke stort ved å la andre gjøre det for deg.

Lenke til kommentar
Gjest Slettet+142

Hmm. Da jeg nå prøvde å legge den inn i koden, fikk jeg plutselig sett mer nøye på koden din, og min spørring vil visst ikke virke allikevel :hm:

 

Sorry :(

 

 

Koden din kan skrives om til å fungere med spørringen min tror jeg, men det er litt stress. Kan evt. se på det senere om ingen andre kommer opp med en bedre løsning ;)

 

Lenke til kommentar
Høres ut som det er det som trengs. :)

 

Men du kunne ikke skrive om den koden jeg bruker slik at det funker som det skal ved bruk av INNER JOIN?

 

Jeg er litt usikker på hvordan jeg skal få echoet ut informasjonen slik som den vises på bildet. Hvis du skjønner?

9505339[/snapback]

Slå opp i mysql-manualen på join. Kjør spørringen i en terminal eller mysql query administrator (lastes ned fra mysql.com) så du ser hva som egentlig kommer ut.

Du lærer ikke stort ved å la andre gjøre det for deg.

9505364[/snapback]

 

Hehe :p Sant det...

 

Fikset det selv uansett, så takk for hjelpen ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...