mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 09.12.2016 22:42 Benutzername: Passwort: Auto-Login

Thema: [MySQL] Probleme mit GROUP BY vom 04.01.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [MySQL] Probleme mit GROUP BY
Seite: 1, 2  Weiter
Autor Nachricht
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Do 04.01.2007 14:49
Titel

[MySQL] Probleme mit GROUP BY

Antworten mit Zitat Zum Seitenanfang

Hallo,


ich hab da mal eine kleine Frage an euch, ist es möglich in einer SQL-Query mit GROUP BY zu sortieren bzw zu steuern das der aktuellste datensatz zurgegeben wird?

natrürlich muss dann auch die ID des Datensatzes passen also es darf sich nicht nur innerhalb einer Spalte was ändern.


.momai
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Do 04.01.2007 15:58
Titel

Antworten mit Zitat Zum Seitenanfang

Du suchst bestimmt HAVING

http://sql.1keydata.com/de/sql-having.php
 
Anzeige
Anzeige
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Do 04.01.2007 20:21
Titel

Antworten mit Zitat Zum Seitenanfang

ne so ganz funzt des irgendwie net...so stelle ich mir das vor


die erste Tabelle
Code:
mysql> SELECT * FROM products p;
+--------+-----------------------------+---------------+----------------+
| pdt_id | product_descriptions_pdn_id | pdt_ean       | pdt_time       |
+--------+-----------------------------+---------------+----------------+
|      1 |                           1 | 3403840928409 | 20040112201209 |
|      2 |                           1 | 4043956039453 | 20070104201209 |
+--------+-----------------------------+---------------+----------------+
2 rows in set (0.00 sec)



so und nun die Group By anweisung



Die zweite Tabelle
Code:
mysql> SELECT * FROM product_descriptions p;
+--------+-----------------+----------+
| pdn_id | pdn_title       | pdn_text |
+--------+-----------------+----------+
|      1 | Classic Slip-On | NULL     |
+--------+-----------------+----------+
1 row in set (0.00 sec)


Left join aus den oberen beiden Tabellen
Code:
mysql> SELECT pdt_id , pdt_ean , pdn_title , pdt_time FROM products LEFT JOIN product_descriptions p ON product_descriptions_pdn_id = pdn_id;
+--------+---------------+-----------------+----------------+
| pdt_id | pdt_ean       | pdn_title       | pdt_time       |
+--------+---------------+-----------------+----------------+
|      1 | 3403840928409 | Classic Slip-On | 20040112201209 |
|      2 | 4043956039453 | Classic Slip-On | 20070104201209 |
+--------+---------------+-----------------+----------------+
2 rows in set (0.00 sec)


so und nun die Group By Anweisung
Code:
mysql> SELECT pdt_id , pdt_ean , pdn_title , max(pdt_time) FROM products LEFT JOIN product_descriptions p ON product_descriptions_pdn_id = pdn_id GROUP BY pdn_id;
+--------+---------------+-----------------+----------------+
| pdt_id | pdt_ean       | pdn_title       | max(pdt_time)  |
+--------+---------------+-----------------+----------------+
|      1 | 3403840928409 | Classic Slip-On | 20070104201209 |
+--------+---------------+-----------------+----------------+
1 row in set (0.00 sec)


und da haben wir den salat, die EAN passt nicht mit dem timestamp übereinander und genau da liegt das Problem, wie bekomme ich das jetzt hin...

.momai


Zuletzt bearbeitet von momai am Do 04.01.2007 20:23, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Do 04.01.2007 21:13
Titel

Antworten mit Zitat Zum Seitenanfang

XSchinkenX hat geschrieben:
Du suchst bestimmt HAVING

http://sql.1keydata.com/de/sql-having.php


des funzt irgendwie auch net bekomme zwar keinen fehler aber auch keine ausgabe

Code:
SELECT pdt_id , pdt_ean , pdn_title , pdt_time FROM products LEFT JOIN product_descriptions p ON product_descriptions_pdn_id = pdn_id GROUP BY pdn_id HAVING pdt_time = max(pdt_time);
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Felix

Dabei seit: 25.10.2003
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 04.01.2007 23:59
Titel

Antworten mit Zitat Zum Seitenanfang

Falls das Problem noch besteht, denke ich, daß es so gehen sollte:

Code:

SELECT
b.pdt_id , b.pdt_ean , a.pdn_title , b.pdt_time
FROM
product_descriptions a,
products b
WHERE
b.pdt_time = (SELECT max(pdt_time) FROM products WHERE product_descriptions_pdn_id = pdn_id);


Grüße,

Felix[/code]


Zuletzt bearbeitet von Felix am Do 04.01.2007 23:59, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Fr 05.01.2007 08:59
Titel

Antworten mit Zitat Zum Seitenanfang

danke mal schaut schon nicht schlecht aus aber leider funktioniert das nicht so wie ich mir das vorgestellt habe ich brauche auf jeden fall einen GROUP BY auf die pdn_id da komme ich nicht rum weil ich eben die Artikel Varianten über die pdn_id gruppieren muss für eine Übersichtsseite und auf dieser seite sollte natürlich immer das aktuellste Produkt aller Varianten dargestellt sein.

.momai
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Fr 05.01.2007 12:10
Titel

Antworten mit Zitat Zum Seitenanfang

warum funktioniert folgendes query nicht

Code:
SELECT MAX(pda_id) AS 'max_pda_id' , pdn_title , (SELECT pda_img_uri FROM product_attributes WHERE pda_id = max_pda_id) AS pda_img_uri FROM product_attributes LEFT JOIN product_descriptions ON product_attributes.product_descriptions_pdn_id = product_descriptions.pdn_id GROUP BY product_descriptions_pdn_id;


Folgenden Fehler bekomme ich

Code:
Reference 'max_pda_id' not supported (refernce to group function)
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
momai
Threadersteller

Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 31
Geschlecht: Männlich
Verfasst Do 11.01.2007 09:35
Titel

Antworten mit Zitat Zum Seitenanfang

das Problem ist irgendwie noch immer nicht gelöst...

deswegen post ich jetzt nochmal komplett alles

also ich habe jetzt eine Lösung über PHP gefunden...bin zwar nicht so glücklich damit aber vielleicht versteht ihr jetzt mein Problem und könnt vielleicht ein gutes query draus basteln des dann auch funktioniert.

Ich werd noch mal alles an Tabellen und ausgaben für euch posten um jetzt mal Kalrheit in die Sache zu bringen um eventuell meine Lösung zu verbessern

Tabelle product_attributes
Code:

SELECT * FROM product_attributes ;
+--------+-----------------------------+-------------------+
| pda_id | product_descriptions_pdn_id | pda_img_uri       |
+--------+-----------------------------+-------------------+
|      1 |                           1 | classic_green.jpg |
|      2 |                           1 | classic_blue.jpg  |
|      3 |                           1 | classic_pink.jpg  |
|      4 |                           2 | dunk_blue.jpg     |
|      5 |                           3 | shox_gold.jpg     |
|      6 |                           3 | shox_silver.jpg   |
|      7 |                           4 | reglan_olive.jpg  |
+--------+-----------------------------+-------------------+
7 rows in set (0.00 sec)


Tabelle product_descriptions

Code:

mysql> SELECT * FROM product_descriptions p;
+--------+-----------------+----------+
| pdn_id | pdn_title       | pdn_text |
+--------+-----------------+----------+
|      1 | Classic Slip-On | NULL     |
|      2 | Dunk Low SP     | NULL     |
|      3 | Shox NZ         | NULL     |
|      4 | Reglan Polo     | NULL     |
+--------+-----------------+----------+
4 rows in set (0.00 sec)


und durch folgendes Skripte habe ich mein gewünschtes Ziel erreicht halt leider über PHP hätte das gerne in SQL gelöst...wie gesagt vielleicht findet ja jetzt einer was...

Code:

<?php

$host = "xxxxx";
$user = "xxxxx";
$pass = "xxxxx";
$db = "xxxxx";

$link = mysql_connect($host,$user,$pass);
mysql_select_db($db, $link);

$query = "SELECT MAX(pda_id) AS 'max_pda_id' FROM product_attributes
GROUP BY product_descriptions_pdn_id ORDER BY max_pda_id DESC;";

$result = mysql_query($query);

while($dat = mysql_fetch_array($result)){
echo $dat['max_pda_id'] . " ";
        $query2 = "SELECT * FROM product_attributes WHERE pda_id = " . $dat['max_pda_id'] . ";";
        $result2 = mysql_query($query2);
        while($dat2 = mysql_fetch_array($result2)){
                echo $dat2['pda_img_uri'] . "<br>";
        }
}

?>


und aus diesem Skript erhalte ich im Browser folgende Ausgabe

7 reglan_olive.jpg
6 shox_silver.jpg
4 dunk_blue.jpg
3 classic_pink.jpg

und so soll das dann auch sein...

ich hoffe noch auf euch bringt das auf eine Idee die mir weiter hilft...Danke


.momai
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [MySQL] Rows vor Group By ordnen :-S
MySQL / case & group by & order
Probleme mit MySQL und phpMyAdmin
Probleme mit ner mySQL Phrase
PHP und Mysql Eerstversuch ... Probleme mit 1und1
[MySQL] Probleme bei Abfrage/Löschen aus Verbindungstabelle
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.