Autor |
Nachricht |
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 04.01.2007 15:49
Titel [MySQL] Probleme mit GROUP BY |
|
|
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
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
|
|
|
|
Anzeige
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 04.01.2007 21:21
Titel
|
|
|
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 21:23, insgesamt 1-mal bearbeitet
|
|
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 04.01.2007 22:13
Titel
|
|
|
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); |
|
|
|
|
|
Felix
Dabei seit: 25.10.2003
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 05.01.2007 00:59
Titel
|
|
|
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 Fr 05.01.2007 00:59, insgesamt 1-mal bearbeitet
|
|
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Fr 05.01.2007 09:59
Titel
|
|
|
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
|
|
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Fr 05.01.2007 13:10
Titel
|
|
|
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) |
|
|
|
|
|
momai
Threadersteller
Dabei seit: 08.09.2003
Ort: Augsburg
Alter: 38
Geschlecht:
|
Verfasst Do 11.01.2007 10:35
Titel
|
|
|
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
|
|
|
|
|
|
|
|
Ä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
ähnlich probleme mit mysql-zugriff auf 1und1-db
|
|