Inhalt aus drei Datensätze in einen Anzeigen lassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Inhalt aus drei Datensätze in einen Anzeigen lassen

    Hallo,

    ich habe jetzt wieder ein Problem. Und zwar würde ich gerne Produkt Name von drei Datensätzen in ein einziges $row kriegen.

    Ich habe jetzt drei Datensätze mit verschiedenen Produkt Namen aber gleiche Lieferanten und gleiches Datum.

    Kann ich es jetzt hinkriegen wenn ich den Inhalt aus der Tabelle products_in anzeigen lasse das diese Datensätze mit gleichen Lieferanten und gleichem Datum in eins "verschmelzen" xD?

    Immoment benutze ich folgenden Code um die Datensätze anzeigen zu lassen:

    Quellcode

    1. $template = new Template;
    2. $template->set_filenames(array('product' => 'templates/product_in_overview.tpl'));
    3. $sql = "SELECT product_ID, group_ID, product_distributor, product_name, DATE_FORMAT(datetime,'".DATE_STYLE."') AS datetime FROM ".TABLE_PREFIX."products_in ORDER BY product_ID ASC";
    4. $result = mysql_query($sql) OR die(mysql_error());
    5. while($row = mysql_fetch_array($result)) {
    6. $template->assign_block_vars('product', array(
    7. 'PRODUCT_ID' => $row['product_ID'],
    8. 'PRODUCT_GROUP' => $row['group_ID'],
    9. 'PRODUCT_DISTRIBUTOR' => $row['product_distributor'],
    10. 'PRODUCT_NAME' => $row['product_name'],
    11. 'DATETIME' => $row['datetime']
    12. ));
    13. }
    14. $template->pparse('product');
    Alles anzeigen


    (Templatesystem vom phpBB)

    Also, am Ende soll es nicht mehr so aussehen:

    ID Produkt Lieferant Datum
    1 Festplatte Lieferant 10.10.2007
    2 DVD Laufwerk Lieferant 10.10.2007
    3 RAM Lieferant 10.10.2007

    sondern:

    ID Produkt Lieferant Datum
    1 Festplatte, DVD Laufwerk, RAM Lieferant 10.10.2007

    Ich hoffe das ist verständlich :)!

    Danke

    Mit freundlichen Grüßen,

    Illidan
  • Du kannst das auch mit einem kleinen Join lösen.

    Schau dir hier einmal bitte die Joins als Beispiel an, dann solltest du es hinbekommen:
    Wie ähnlich sind unsere Geschmäcker?
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • Da muss ich meinen beiden Vorrednern zustimmen. Eleganter ist es, diese Problematik auf die Datenbankschicht zu verlegen.

    Aber falls du Joins nicht beherrschst (das ist nämlich keine einfache Problematik!), geht das auch mit PHP.

    Quellcode

    1. $template = new Template;
    2. $template->set_filenames(array('product' => 'templates/product_in_overview.tpl'));
    3. $sql = "SELECT product_ID, group_ID, product_distributor, product_name, DATE_FORMAT(datetime,'".DATE_STYLE."') AS datetime FROM ".TABLE_PREFIX."products_in ORDER BY product_ID ASC";
    4. $result = mysql_query($sql) OR die(mysql_error());
    5. $product_id = array();
    6. $product_name= array()
    7. while($row = mysql_fetch_array($result)) {
    8. //hier also die Daten "einsammeln"
    9. $product_id[] = $row['product_ID'];
    10. $product_group = $row['group_ID'];
    11. $product_distributor = $row['product_distributor'];
    12. $product_name[] = $row['product_name'];
    13. $datetime = $row['datetime'];
    14. }
    15. $template->assign_block_vars('product', array(
    16. 'PRODUCT_ID' => $product_id,
    17. 'PRODUCT_GROUP' => $group_id,
    18. 'PRODUCT_DISTRIBUTOR' => $product_distributor,
    19. 'PRODUCT_NAME' => $product_name,
    20. 'DATETIME' => $datetime
    21. ));
    22. $template->pparse('product');
    23. //Das Template muss nun die Arrays auslesen (in Smarty gibt es dafür Schleifen usw.) oder du machst das Array vorher zu einem String (mit php-funktionen)
    Alles anzeigen


    Ist aber ungetestet. Du solltest dich auch eher darauf konzentrieren, die DB-Lösung anzustreben. Vielleicht kann dir einer der beiden anderen ein kleines Beispiel geben.

    bye
  • So, hab nochmal nach GROUP_CONCAT gegooglet und was gefunden und es geht :)!

    Hab jetzt einfach bei der SQL Abfrage das "product_name" durch das hier ersetzt:

    Quellcode

    1. GROUP_CONCAT(product_name ORDER BY product_ID) as product_name


    Aber zwei kleine Probleme hab ich noch und zwar will SEPERATOR ', ' nicht funktioniere.

    Quellcode

    1. GROUP_CONCAT(product_name ORDER BY product_ID SEPERATOR ', ' ) as product_name


    Ich krieg immer den Fehler:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SEPERATOR ',') AS product_name, DATE_FORMAT(datetime,'%d.%m.%Y') AS datetime FRO' at line 1

    Ich kann nicht verstehen woran das liegen soll oo!

    und das zweite gitbs ne Möglichkeit bei GROUP BY 2 sachen zu nehmen? Also das er jetzt zb die gruppiert bei den das Datum und der Lieferant übereinstimmt?


    EDIT an d0nut:
    Hey, dank dir :)!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Illidan ()