Ich habe drei Tabellen. Eine Tabelle heißt places
, diese Tabelle enthält verschiedene Orte (wie Geschäfte, Restaurants, etc ...) Jeder "Ort" ist mit einer Tabelle namens categories
verknüpft, jedoch haben einige Kategorien Unterkategorien in einer hierarchischen Struktur (dh Thai Food ist ein Unterkategorie Restaurants). Mit diesem System kann ein Administrator Orte erstellen und sie mit einer entsprechenden Kategorie oder Unterkategorie abgleichen.Abrufen von Kategorien und Unterkategorien aus Mysql-Tabellen
Was würde ich gerne wissen, was ist der beste Weg, um diese Beziehungen zu erhalten? Derzeit verwende ich JOINs und GROUP_CONCAT, aber ich bekomme immer noch keine gute Ergebnismenge.
Das sind meine Tabellen:
Plätze:
+----+----------------+
| id | name |
+----+----------------+
| 1 | Mings Place |
+----+----------------+
| 2 | Halsey Library |
+----+----------------+
| 3 | Stellas USO |
+----+----------------+
places_categories_rel:
+----------+-------------+
| place_id | category_id |
+----------+-------------+
| 1 | 2 |
+----------+-------------+
| 2 | 4 |
+----------+-------------+
| 3 | 3 |
+----------+-------------+
| 3 | 4 |
+----------+-------------+
Kategorien:
Wie Sie sehen können, sind einige Orte an eine Unterkategorie angehängt, einige Orte sind direkt an eine Elternkategorie angehängt (ohne Unterkategorien), und einige Orte haben mehrere Unterkategorien, die unterschiedliche Elternkategorien haben.
meine Ergebnisse zu erhalten, habe ich versucht die folgende SQL:
'SELECT `p`.*,
GROUP_CONCAT(DISTINCT(CONCAT (ca.id, "|", `ca`.`parent_id`, "|", ca.name))) as subcategories,
GROUP_CONCAT(DISTINCT(CONCAT (ca1.id, "|", `ca1`.`parent_id`, "|", ca1.name))) as categories
FROM `places` `p`
LEFT JOIN `places_categories_rel` `rel` ON `rel`.`place_id`=`p`.`id`
LEFT JOIN `categories` `ca` ON `ca`.`id`=`rel`.`category_id`
LEFT JOIN `categories` `ca1` ON `ca1`.`id`=`ca`.`parent_id`
GROUP BY `p`.`id`
Aber meine Ergebnisse kommen mit einigen Kategorien Unterkategorien oder umgekehrt eingestellt wird.
Was ich möchte, ist irgendeine Art von Ergebnismenge zu haben, die mir so etwas zu haben erlauben würde:
array (size=3)
0 =>
array (size=2)
'name' => string 'Mings Place' (length=11)
'categories' =>
array (size=1)
0 =>
array (size=2)
'name' => string 'Restaurant' (length=10)
'subcategories' =>
array (size=1)
0 => string 'Thai Food' (length=9)
1 =>
array (size=2)
'name' => string 'Halsey Library' (length=14)
'categories' =>
array (size=1)
0 =>
array (size=2)
'name' => string 'Government' (length=10)
'subcategories' =>
array (size=1)
0 => string 'Library' (length=7)
2 =>
array (size=2)
'name' => string 'Stellas' (length=7)
'categories' =>
array (size=2)
0 =>
array (size=2)
'name' => string 'Restaurant' (length=10)
'subcategories' =>
array (size=1)
0 => string 'Library' (length=7)
1 =>
array (size=2)
'name' => string 'Government' (length=10)
'subcategories' => null
Idealerweise wird dies alles geschaffen werden, damit ich kann Eingangsfilter. Zum Beispiel, wenn ich nur Orte mit Kategorie von Restaurants sehen möchte, oder Orte mit Regierung und Unterkategorie von italienischem Essen ...
Kann mir bitte jemand helfen, das herauszufinden?
Sie können alle Kategorien mit Unterkategorien auf rekursive Weise erhalten. Überprüfen Sie diese .http: //thecoderain.blogspot.in/2016/03/get-category-and-subcategory-tree-in.html – shubham715