Ik ben bezig om een overzicht te krijgen van naam, beschrijving en plaatje van een training, maar krijg naam en beschrijving in loop. bijvoorbeeld als een training 1 trainingstype heeft, krijg je naam en beschrijving 1 keer. als een training 2 trainingstype heeft, krijg je 2 keer naam en beschrijving.

tabellen:
training
id
naam
beschrijving

categorie
id
cat_naam

training_cat
cat_id
training_id

training_type_training
training_type_training_id
training_id

type_training
id
type_naam
type_plaatje

class/training_communicatie

<?php

require_once 'Singleton.php';

class training_communicatie {

	public $id, $afdeling;
	protected $connect;
	protected $sql;

	public function __construct() {
		$this->connect = Singleton::getconnect();
	}

	public function __destruct() {
		$this->connect = null;
	}

	
	public function select_training() {
		$afdeling_subafdeling = 'SELECT DISTINCT train.training_naam AS Training, train.beschrijving AS Beschrijving, cat.cat_naam AS Categories, typetrain.type_plaatje AS Plaatjes
					  FROM training train
					  JOIN training_cat train_cat ON train_cat.training_id = train.id
					  JOIN categorie cat ON cat.id = train_cat.cat_id
					  JOIN training_type_training trainingtype ON trainingtype.training_id = train.id
					  JOIN type_training typetrain ON typetrain.id = trainingtype.training_type_training_id
					  WHERE cat_naam="Ontwikkeling" ORDER BY train.training_naam
					  ';
		return $resultaat_subafdeling=mysql_query($afdeling_subafdeling);
	}
}

?>


overzicht-training_soort_communicatie.php
 <?php
      require_once 'class/training_communicatie.php';
      
      $afdeling1 = new training_communicatie();
      
      $alle_afdelingen = $afdeling1->select_training();


      echo '<table border="0" cellspacing="4" cellpadding="4"><tr>';
	  $intRows = 0;
      //foreach($alle_afdelingen as $a) 
	  while($a=mysql_fetch_assoc($alle_afdelingen))
	  {
		 echo "<td>";  
		 $intRows++;
         echo '<td>' . $a['Training'] . '</td>';
		 $location =  $a['Plaatjes'];
         echo '<td>' . $a['Beschrijving'] . '</td>';
         echo "<img src='$location'>";		 
		if(($intRows)%2==0)  
		{  
		echo"</tr>";  
		}  
      }

      echo '</table>';
      ?> 
En wat lukt er dan niet?

Volgens mij geeft dit een true of een false terug:
return $resultaat_subafdeling=mysql_query($afdeling_subafdeling);
- SanThe - op 18/05/2014 16:58:42

En wat lukt er dan niet?

Volgens mij geeft dit een true of een false terug:
return $resultaat_subafdeling=mysql_query($afdeling_subafdeling);


ik heb een training toegevoegd met als type training: klassikaal, e-learning
wat hij dan doet is laat: naam training en beschrijving 2 keer zien gebaseerd op het aantal type trainingen, maar hoort de naam en beschrijving maar 1 keer te laten zien.
En wat geeft die query terug in phpmyadmin?
Dat komt simpelweg omdat je twee records in de koppeltabel hebt zitten en bij een simpele join levert dat dus twee records in de resultset op. Ofwel dat moet je gaan filteren in php, ofwel je moet even kijken naar de MySQL functie GROUP_CONCAT, om alle categorien te gaan grouperen en zo 1 record over te houden met een kolom waarin alle categorien staan.
Oei, je hebt gelijk! het ligt aan de query! Als ik hem uitvoer dan krijg ik ook 2 keer het uitkomst!

Weet jij misschien hoe ik de query beter kan herschrijven?
- SanThe - op 18/05/2014 17:15:16

En wat geeft die query terug in phpmyadmin?



Toevoeging op 18/05/2014 18:09:39:

ik heb nu deze query gemaakt, alleen nu heb ik een andere probleem. De dingen die ik groupeer zijn plaatjes en als ik ze groepeer kan ik ze niet meer zien!

Dit is de query:
SELECT DISTINCT train.training_naam AS Training, train.beschrijving AS Beschrijving, cat.cat_naam AS Categories, GROUP_CONCAT( typetrain.type_plaatje ) AS Plaatjes
FROM training train
JOIN training_cat train_cat ON train_cat.training_id = train.id
JOIN categorie cat ON cat.id = train_cat.cat_id
JOIN training_type_training trainingtype ON trainingtype.training_id = train.id
JOIN type_training typetrain ON typetrain.id = trainingtype.training_type_training_id
WHERE cat_naam = "Communicatie"
ORDER BY train.training_naam

Dit is de eigenschap van het mislukte afbeelding: http://localhost/fz/Images/klassikaal.png,Images/elearning.png,Images/expertise.png,Images/klassikaal.png,Images/elearning.png

Erwin H op 18/05/2014 17:19:28

Dat komt simpelweg omdat je twee records in de koppeltabel hebt zitten en bij een simpele join levert dat dus twee records in de resultset op. Ofwel dat moet je gaan filteren in php, ofwel je moet even kijken naar de MySQL functie GROUP_CONCAT, om alle categorien te gaan grouperen en zo 1 record over te houden met een kolom waarin alle categorien staan.


Reageren