tabelle sortieren und in array ausgeben
ver2felt
- datenbank
0 hawkmaster0 ver2felt
0 Vinzenz Mai
Hallo bin ver2felt,
finde euer Forum richtig super und lese regelmäßig die Postings, bei der Suche habe ich aber leider nichts gefunden, bei google leider auch nichts...
Vielleicht könnt ihr mir helfen:
Habe folgende Tabelle mit einigen Testdaten:
warenkorb:
cart_id produkt_id parent_id parent
1 12 123 parent
2 13 456 parent
3 14 456 child
4 15 456 child
Die Frage:
wie müsste meine Abfrage bzw. PHP code aussehen, dass ein Array gebildet wird, dass zu jeder parent_id die jeweiligen Produkt_ids beinhaltet.
also z.B.:
array [0] => parent_id : 123
produkt_id : (12)
array [1] => parent_id : 456
produkt_id : (13, 14, 15)
wobei die "parents" Pizzas sein werden und die "childs" Zutaten, wenn man noch nach child und parent innerhalb der arrays sortieren könnte, wäre es genial, will aber eure zeit nicht zu arg in Anspruch nehmen...
Hoffe ihr könnt mir helfen, vielleicht auch nur ein tip, damit ich auf die richtige spur komme
ciao,
bin ver2felt
Hallo
wie müsste meine Abfrage bzw. PHP code aussehen, dass ein Array gebildet wird, dass zu jeder parent_id die jeweiligen Produkt_ids beinhaltet.
was hast du denn schon versucht?
Zeige doch mal deine SELECT Abfragen?
viele Grüße
hawk
Hallo,
bins wieder ver2felt... danke für die Antwort hawk
was hast du denn schon versucht?
Zeige doch mal deine SELECT Abfragen?
Also ich hab schon so einiges versucht und alles davon ging größtenteils, aber in letzter Konsequenz dann halt doch nicht. So z.B. bei diesem Versuch:
$getProducts_query ="SELECT produkt_id, parent_id, anzahl FROM warenkorb WHERE parent = 'true' ORDER BY cart_id DESC";
$getProducts_res = mysql_query($getProducts_query);
while ($cartProduct = mysql_fetch_array($getProducts_res))
{
$product_detail_query = "SELECT produkt_name, preis FROM produkte WHERE produkt_id = '".$cartProduct['produkt_id']."'";
$product_detail_res = mysql_query($product_detail_query);
$this->product_detail = mysql_fetch_array($product_detail_res);
$this->cartProducts[] = array ("produkt_id" => $cartProduct['produkt_id'],
"parent_id" => $cartProduct['parent_id'],
"produkt_anzahl" => $cartProduct['anzahl'],
"produkt_name" => $this->product_detail['produkt_name'],
"produkt_preis" => $this->product_detail['preis']);
}
$getProducts_query ="SELECT parent_id
FROM warenkorb
WHERE parent = 'true'
ORDER BY cart_id DESC";
$getProducts_res = mysql_query($getProducts_query);
while ($getProducts = mysql_fetch_array($getProducts_res))
{
$this->parent_ids[] = $getProducts['parent_id'];
}
Lese hier erst mal die parent_ids aus und die dazugehörigen produkt_ids, bilde hernach ein Objekt mit den Informationen wie Preis, anzahl usw. und schließlich sollten dann am Ende noch die Zutaten rein... Hoffe, dass hilft weiter...
viele Grüße
hawk
ciao
bin ver2felt
Hallo,
finde euer Forum richtig super und lese regelmäßig die Postings, bei der Suche habe ich aber leider nichts gefunden, bei google leider auch nichts...
warenkorb:
cart_id produkt_id parent_id parent
1 12 123 parent
2 13 456 parent
3 14 456 child
4 15 456 child
array [0] => parent_id : 123
produkt_id : (12)array [1] => parent_id : 456
produkt_id : (13, 14, 15)
mit MySQL ist dies recht einfach. Es gibt die Aggregatsfunktion GROUP_CONCAT
wobei die "parents" Pizzas sein werden und die "childs" Zutaten, wenn man noch nach child und parent innerhalb der arrays sortieren könnte,
die auch eine ORDER-BY-Klausel kennt.
wäre es genial, will aber eure zeit nicht zu arg in Anspruch nehmen...
Das recht einfache SQL-Statement soll also folgendes liefern:
Gib mir
für jede parent_id
die aufsteigend sortierte durch Komma getrennte Liste der produkt_ids
aus der Tabelle warenkorb
wobei es für jede
der parent_id
nur einen Datensatz geben soll.
SELECT -- Gib mir
parent_id, -- die parent_id
[link:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat@title=GROUP_CONCAT]( -- und die Liste der zugehörigen
[link:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast@title=CAST](product_id AS CHAR) -- in Zeichenketten umgewandelten product_ids
ORDER BY product_id -- aufsteigend sortiert,
SEPARATOR ', ' -- durch Komma und Leerzeichen getrennt
) zutaten -- (gib der Spalte einen netten Namen=
FROM -- aus der Tabelle
warenkorb -- warenkorb
GROUP BY -- gruppiert nach (d.h. ein Wert je)
parent_id -- den verschiedenen Werten der parent_id,
ORDER BY -- aufsteigend sortiert nach
parent_id -- der parent_id
liefert bei Deinen Daten folgendes Ergebnis:
parent_id zutaten
--------- ----------
123 12
456 13, 14, 15
Dein zweiter Beitrag läßt mich vermuten, dass Du ein Anfänger in Sachen SQL bist. Das ist nichts Schlimmes: jeder hat einmal angefangen. SQL-Abfragen in Schleifen abzufeuern, ist meist keine gute Idee. Typischerweise will man in solchen Fällen einen JOIN verwenden. Statt über Schleifen diese id-Werte in Namen wie "Pizza Diavolo" und "Peperoni" oder "Salami" umzusetzen, solltest Du diese Namen aus den entsprechenden Tabellen nehmen.
Zu Joins findest Du unter SELFHTML aktuell zwei Artikel, die Dir beim Einstieg helfen können:
- Einführung in Joins
- Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz
Hallo und danke Schön,
muss ich gleich mal ausprobieren...
Dein zweiter Beitrag läßt mich vermuten, dass Du ein Anfänger in Sachen SQL bist. Das ist nichts Schlimmes: jeder hat einmal angefangen. SQL-Abfragen in Schleifen abzufeuern, ist meist keine gute Idee. Typischerweise will man in solchen Fällen einen JOIN verwenden. Statt über Schleifen diese id-Werte in Namen wie "Pizza Diavolo" und "Peperoni" oder "Salami" umzusetzen, solltest Du diese Namen aus den entsprechenden Tabellen nehmen.
werde mir das mit den Joins auf jeden Fall anschauen, mache zwar schon eine Weile mit SQL rum, aber die Sicherheit was ich wie wann wo einzusetzen habe fehlt mir leider, aber mit etwas Übung wird es hoffentlich für meine Belange ausreichen
vielen Dank für die Hilfe
bin nicht mehr so ver2felt
Super!!!
funktioniert wunderbar, da wäre ich nie draufgekommen...
Werde mir gleich mal ein gutes Buch zu SQL besorgen, damit ich das irgendwann mal selber hinbekomme
danke nochmal
ich war ver2felt
Hallo,
finde euer Forum richtig super und lese regelmäßig die Postings, bei der Suche habe ich aber leider nichts gefunden, bei google leider auch nichts...
warenkorb:
cart_id produkt_id parent_id parent
1 12 123 parent
2 13 456 parent
3 14 456 child
4 15 456 childarray [0] => parent_id : 123
produkt_id : (12)array [1] => parent_id : 456
produkt_id : (13, 14, 15)mit MySQL ist dies recht einfach. Es gibt die Aggregatsfunktion GROUP_CONCAT
wobei die "parents" Pizzas sein werden und die "childs" Zutaten, wenn man noch nach child und parent innerhalb der arrays sortieren könnte,
die auch eine ORDER-BY-Klausel kennt.
wäre es genial, will aber eure zeit nicht zu arg in Anspruch nehmen...
Das recht einfache SQL-Statement soll also folgendes liefern:
Gib mir
für jede parent_id
die aufsteigend sortierte durch Komma getrennte Liste der produkt_ids
aus der Tabelle warenkorb
wobei es für jede
der parent_id
nur einen Datensatz geben soll.
SELECT -- Gib mir
parent_id, -- die parent_id
[link:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat@title=GROUP_CONCAT]( -- und die Liste der zugehörigen
[link:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast@title=CAST](product_id AS CHAR) -- in Zeichenketten umgewandelten product_ids
ORDER BY product_id -- aufsteigend sortiert,
SEPARATOR ', ' -- durch Komma und Leerzeichen getrennt
) zutaten -- (gib der Spalte einen netten Namen=
FROM -- aus der Tabelle
warenkorb -- warenkorb
GROUP BY -- gruppiert nach (d.h. ein Wert je)
parent_id -- den verschiedenen Werten der parent_id,
ORDER BY -- aufsteigend sortiert nach
parent_id -- der parent_id
>
> liefert bei Deinen Daten folgendes Ergebnis:
>
> parent\_id zutaten
> --------- ----------
> 123 12
> 456 13, 14, 15
>
> [Dein zweiter Beitrag](https://forum.selfhtml.org/?t=180918&m=1196123) läßt mich vermuten, dass Du ein Anfänger in Sachen SQL bist. Das ist nichts Schlimmes: jeder hat einmal angefangen. SQL-Abfragen in Schleifen abzufeuern, ist meist keine gute Idee. Typischerweise will man in solchen Fällen einen JOIN verwenden. Statt über Schleifen diese id-Werte in Namen wie "Pizza Diavolo" und "Peperoni" oder "Salami" umzusetzen, solltest Du diese Namen aus den entsprechenden Tabellen nehmen.
>
> Zu Joins findest Du unter SELFHTML aktuell zwei Artikel, die Dir beim Einstieg helfen können:
>
> - [Einführung in Joins](http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/)
> - [Fortgeschrittene Jointechniken](http://aktuell.de.selfhtml.org/artikel/datenbanken/fortgeschrittene-joins/)
>
>
> Freundliche Grüße
>
> Vinzenz