login  Naam:   Wachtwoord: 
Registreer je!
 Forum

goed selecteren (join?)

Offline Behemutant - 22/07/2008 16:29
Avatar van BehemutantNieuw lid Beste,

ik heb diverse tutorials bekeken maar snap het join geval niet echt.
volgensmijn is het wel wat ik nodig heb. Ik probeer het even uit te leggen:

Ik heb 2 tables.

Eentje met producten als volgt:
------
MOVIES
-------
id
titel
omschrijving
url

en eentje met beoordelingen als volgt:

------
BEOORDELING
-------
id
movie_id
score
ip

Wat er nu gebeurd:

als iemand een beoordeling geeft dan staat het id van movies in de table beoordeling bij movie_id.

Op mijn index pagina haal ik de nieuwste filmpjes op (ORDER BY ID).
Hiervan weergeef ik de 6 nieuwste. Ik wil nu ook de beoordeling weergeven, MITS deze bestaat. Du dat wordt mijn query in de r ichting van:

select * from site_movies, site_beoordeling ORDER BY id

kan iemand mij dit svp uitleggen? kom er maar niet uit.

8 antwoorden

Gesponsorde links
Offline Martijn - 22/07/2008 16:36 (laatste wijziging 22/07/2008 16:38)
Avatar van Martijn Crew PHP dus ik neem aan dat je in 1x graag een film met beoordeling selecteerd?

  1. mysql_query("
  2. SELECT m.id,m.titel,b.score
  3. FROM movies AS m
  4. INNER JOIN beoordeling AS b
  5. ON (m.id=b.movie_id)
  6. ")
  7. OR die(mysql_error());


en dat met een fetchje word t gewoon $fetch['id'] etc
Offline Berten - 22/07/2008 16:40 (laatste wijziging 22/07/2008 16:46)
Avatar van Berten PHP beginner
  1. SELECT *
  2. FROM movies
  3. INNER JOIN beoordeling ON (movies.id=beoordeling.movie_id);



Deviour was eerst 
Offline Behemutant - 22/07/2008 16:44
Avatar van Behemutant Nieuw lid hehe even wachten... als ik dus zou nemen wat ik ECHT nodig heb zou de code worden als volgt:

mysql_query('SELECT
a.titel, a.omschrijving, a.middle_pic, a.filmpje
FROM site_movies AS a
INNER JOIN site_beoordeling AS b
ON (m.id = b.movie_id)');

??? erg ingewikkeld ineens dit als je het nog nooit gedaan hebt haha 
Offline Berten - 22/07/2008 16:45
Avatar van Berten PHP beginner dat is inderdaad de manier 
let wel op: als je met deze query werkt en er zijn meerdere beoordelingen zul je voor elke beoordeling ook je film een keertje terug krijgen.

Dus: 2 * de zelfde film (indien er 2 beoordelingen zijn)

offtopic: zet ook ff je code binnen tags, maakt het eenvoudiger
Offline Martijn - 22/07/2008 17:12
Avatar van Martijn Crew PHP hmm wat je net deed vereist geen inner join, je selecteerd namelijk niets uit site_beoordelingen 

en om dat van Berten uit te sluiten kun je een LIMIT 1 gebruiken 
Offline Behemutant - 22/07/2008 17:28 (laatste wijziging 22/07/2008 18:27)
Avatar van Behemutant Nieuw lid EDIT:

Heb het nu goed lopen op één ding na:

  1. <?php
  2.  
  3. require_once('database.php');
  4.  
  5. $query = mysql_query('SELECT * FROM
  6. site_movies
  7. INNER JOIN
  8. site_beoordeling
  9. ON
  10. (site_movies.id=site_beoordeling.movie_id) ORDER BY site_movies.id ASC LIMIT 0,1') or die(mysql_error());
  11. $i = 0;
  12. while($rows = mysql_fetch_assoc($query)){
  13. $titel[$i] = $rows['titel'];
  14. $id[$i] = $rows['id'];
  15. $scr[$i] = $rows['score'];
  16. $i++;
  17. }
  18. ?>


Probleem: als een filmpje meerdere beoordelingen heeft laat hij deze PER beoordeling een keer zien in de query...
dat is niet de bedoeling.

Ik wil ze maar één keer laten zien.
maar ander zijds is het wel zo:

dat ik per beoordeling het aantal punten moet optellen en moet tellen hoeveel (rows) keer er op DAT filmpje gestemt is...

is dit mogelijk?
Offline Diko - 26/07/2008 12:40 (laatste wijziging 26/07/2008 12:41)
Avatar van Diko PHP interesse
  1. SELECT m.titel, b.score FROM movies m, beoordeling b WHERE m.id = b.movie_id


waarom limiten op 1? Als er meerdere beoordelingen zijn dan tel je die toch gewoon bij elkaar op en dan deel je door het aantal beoordelingen? 

  1. SELECT m.titel, count(b.score) AS aantal, sum(b.score) AS totaal FROM movies m, beoordeling b WHERE m.id = b.movie_id


en dan gewoon netjes verwerken in een totaal overzichtje:
  1. <?php
  2. while($row = mysql_fetch_array($query)) {
  3. $score = $totaal / $aantal;
  4. echo 'Film '. $row['titel'] .' heeft een gemiddelde score van '. $score .' ('. $row['aantal'] .' beoordelingen)';
  5. }
Offline Rik - 26/07/2008 13:01
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Waarom doe je niet alles netjes in één query?  
  1. SELECT
  2. movies.*,
  3. SUM(score) / COUNT(beoordeling.movie_id) AS score
  4. FROM beoordeling
  5. INNER JOIN movies
  6. ON (movies.id = beoordeling.movie_id)
  7. GROUP BY beoordeling.movie_id;
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.407s