[MySQL] Zwei Tabellen verschachtelt auslesen für verschachteltes Select-Feld (HTML)

suntrop

Erfahrenes Mitglied
Ich denk mir mir seit Stunden Ecken in meinen Kopf, weil ich keine Lösung finde und hoffe ihr könnt mir weiterhelfen.

Ich will ein verschachteltes HTML-Select-Feld aus einer MySQL-DB erstellen. In etwa so …
HTML:
<select name="Aufgaben">
	<optgroup label="Kunde 1">
		<option label="Aufgabe 1">Aufgabe 1</option>
		<option label="Aufgabe 2">Aufgabe 2</option>
		<option label="Aufgabe 3">Aufgabe 3</option>
		<option label="Aufgabe 4">Aufgabe 4</option>
	</optgroup>
	
	<optgroup label="Kunde 2">
		<option label="Aufgabe 1">Aufgabe 1</option>
		<option label="Aufgabe 2">Aufgabe 2</option>
		<option label="Aufgabe 3">Aufgabe 3</option>
		<option label="Aufgabe 4">Aufgabe 4</option>
	</optgroup>
	
	<optgroup label="Kunde 3">
		<option label="Aufgabe 1">Aufgabe 1</option>
		<option label="Aufgabe 2">Aufgabe 2</option>
		<option label="Aufgabe 3">Aufgabe 3</option>
		<option label="Aufgabe 4">Aufgabe 4</option>
	</optgroup>
</select>

Kunden und Aufgabe stehen in zwei Tabellen. Also habe ich per JOIN alles zusammen ausgelesen. Dann habe ich jedoch nur ein Array mit allen Kunden und allen Aufgaben. Dann habe ich mit GROUP BY versucht das ganze zu "gruppieren". Aber ich glaube dafür ist das Group by nicht gedacht.
Code:
SELECT
  c.id AS customer_id,
  c.name AS customer_name,
  t.id AS task_id,
  t.title AS task_title

FROM
  customers AS c

LEFT JOIN
  task AS t
ON
  t.customer_id = c.id

Ich denke man könnte jeden Kunden auslesen und dann in einem Sub-Query alle dazugehörigen Aufgaben auslesen. Aber das klingt irgendwie schon recht "langsam".

Kann ich mit einem Query die DB so auslesen, dass ich mein HTML-Select-Feld aufbauen kann? Ich muss also alle Aufgaben den Kunden unterordnen können.

Hoffe ihr versteht was ich meine :)

Grüße
- suntrop
 
Bei MySQL bleibt dir hier meines wissens nur ein ORDER BY kategorie, und dann muss deine applikation prüfen ob sich die kategorie im vergleich zum letzten datensatz geändert hat.
 
Ich habe es mit einer foreach-Schleife und einem wilden Array-Konstrukt hinbekommen :)

So schauts aktuell aus und funktioniert, wie ich es brauche. :)

PHP:
$this->db->select( 'p.id AS project_id, p.title AS project_title, c.name AS customer_name' );
$this->db->from( 'projects AS p' );
$this->db->join( 'customers AS c', 'p.customer_id = c.id', 'left' ); 
$this->db->order_by( "c.name" );
$query = $this->db->get();

if ( $query->num_rows() > 0 )
{
    $projects = $query->result_array();
}
    
foreach ($projects as $row) {
     $p[$row['customer_name']][$row['project_id']] = $row['project_title'];
}

Dennoch Danke für deine Hilfe!
 

Neue Beiträge

Zurück