login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Blog ophalen uit db... (Opgelost)

Offline Wouser - 23/07/2008 21:30 (laatste wijziging 14/08/2009 13:55)
Avatar van WouserPHP interesse Hallo mensen,

Ik heb drie tabellen. Blog, user en post.

In de tabel blog staat o.a. de id van de user die de blog heeft geschreven.
In de tabel user staat o.a. de naam van de user die de blog heeft geschreven.
In de tabel post staat o.a. de comments van de blog.

Nu wil ik graag een query maken die de blogs selecteert met de daarbijhorende naam van de gebruiker die de blog heeft geschreven. Daarnaast wil ik dan ook het aantal comments bepalen voor elke blog.

Nu heb ik deze volgende query.
  1. <?php
  2. $sql = 'SELECT blog.*, user.user_username as blog_author, COUNT(post.blog_id) as blog_ccount
  3. FROM blog
  4. INNER JOIN post
  5. ON post.blog_id = blog.blog_id
  6. INNER JOIN user
  7. ON user.user_id = blog.blog_author
  8. GROUP BY post.blog_id';
  9. ?>


Deze voldoet eigenlijk maar gedeeltelijk in hetgene wat ik wil. De query weergeeft alleen de blogs wanneer er
a. De user van de user tabel nog bestaat.
b. Er al een comment is op de blog.

Nu wil ik echter dat de andere blogs waar nog geen comment op is of waarvan de user niet meer bestaat ook weergeven worden. Met bijvoorbeeld waarbij blog_ccount gelijk is aan NULL of 0 (zelfde geld voor blog_author)

De bovenstaande query geeft btw het volgende resultaat...
  1. [0] => Array
  2. (
  3. [blog_id] => 1
  4. [blog_author] =>
  5. [blog_status] => 1
  6. [blog_comment] => 1
  7. [blog_ccount] => 1
  8. [blog_title] => Hello world
  9. [blog_subtitle] => Test Blog
  10. [blog_date] => 2008-08-08
  11. [blog_content] => Welcome to my blog, this is my very first message. Feel free to add a comment. Cheers and goodluck further.
  12. )


voor diegene die willen weten hoe de tabellen er precies uitzien...

Verder moet ik nog even melden dat de tabel `post` ook word gebruikt voor de posts in me guestbook. Deze krijgen dan standaard het blog_id nummer 0.

3 antwoorden

Gesponsorde links
Offline Ontani - 24/07/2008 09:02
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
als je resultaten wilt weergeven waarvan er geen rijen voorkomen in een andere tabel moet je geen inner join gebruiken ( controleerd op bestaande rijen die overeenkomen ) maar right outer join of left outer join.
Offline Berten - 24/07/2008 09:02 (laatste wijziging 24/07/2008 09:05)
Avatar van Berten PHP beginner
  1. <?php
  2. $sql = 'SELECT blog.*, user.user_username as blog_author, (SELECT count(*) from post where post.blog_id=blog.blog_id group by post.blog_id) as blog_count
  3. FROM blog
  4. OUTER JOIN user
  5. ON user.user_id = blog.blog_author';
  6. ?>


het kan idd zijn dat je left/right outer join moet gebruiken.

Heb de code niet getest, dus kan zijn dat er wel wat mis gaat.
Offline Wouser - 24/07/2008 16:21 (laatste wijziging 24/07/2008 16:34)
Avatar van Wouser PHP interesse Ok alvast bedankt ben er nu uit gekomen en heb nu de volgende query 

-edit-

Heb me sql nog beetje aangepast en ben nu tot het volgende gekomen 

  1. SELECT blog.*, user.user_username AS blog_author, COUNT(post.blog_id) AS blog_ccount
  2. FROM blog
  3. LEFT JOIN post
  4. ON post.blog_id = blog.blog_id
  5. LEFT JOIN user
  6. ON user.user_id = blog.blog_author
  7. GROUP BY post.blog_id
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.202s