Frage zu MySql Abfrage
Kurti
- datenbank
0 Vinzenz Mai0 Kurti
0 dedlfix
Hi,
arbeite mit MySql (niedrige 4er Version - glaub ich) und PHP 5
Habe eine Tabelle mit Bestellungen und möchte aus dieser Tabelle die Top Ten Produkte je Land auswählen. Ich kann die Top Ten Produkte insgesamt wählen, und ich kann für jedes Land eine eigene Abfrage schreiben und mir die jeweiligen Top Ten ausgeben lassen, aber nicht für alle Länder...
select produkt_id, sum(produkt_anzahl) as menge, land from bestellung GROUP BY land, produkt_id ORBER BY menge DESC
soweit so gut, aber wie mache ich das, daß je Land max. die Top 10 Einträge ausgelesen werden?
einfaches LIMIT 10 hilft da nicht ;-) (ja, ich bin so verzweifelt, daß ich sogar das ausprobiert habe und auf eine Überraschung gehofft habe...)
Wäre wirklich dankbar, wenn mir hier einer weiterhelfen könnte
Grüße,
der Kurti
Hallo,
arbeite mit MySql (niedrige 4er Version - glaub ich) und PHP 5
welche genau - das ist wichtig. 4.0 kann UNION, 4.1 endlich Unterabfragen.
Habe eine Tabelle mit Bestellungen und möchte aus dieser Tabelle die Top Ten Produkte je Land auswählen. Ich kann die Top Ten Produkte insgesamt wählen, und ich kann für jedes Land eine eigene Abfrage schreiben und mir die jeweiligen Top Ten ausgeben lassen, aber nicht für alle Länder...
Typischerweise wäre es eine Aufgabe für eine Unterabfrage, bitte gib daher die genaue MySQL-Version an. Diese erhältst Du mit der Abfrage
SELECT VERSION()
Freundliche Grüße
Vinzenz
Typischerweise wäre es eine Aufgabe für eine Unterabfrage, bitte gib daher die genaue MySQL-Version an. Diese erhältst Du mit der Abfrage
SELECT VERSION()
Hallo Vinzenz,
hier das Ergebnis
4.0.27-max-log
werde wohl eine gesamt Abfrage machen müssen und dann via PHP das Ergebnis entsprechend auslesen... schade, dachte das geht eleganter.
Danke euch,
der Kurti
Hallo,
Typischerweise wäre es eine Aufgabe für eine Unterabfrage, bitte gib daher die genaue MySQL-Version an. Diese erhältst Du mit der Abfrage
SELECT VERSION()
4.0.27-max-log
diese Version ist vom 6. Mai 2006 und meiner Meinung nach jenseits von gut.
werde wohl eine gesamt Abfrage machen müssen und dann via PHP das Ergebnis entsprechend auslesen... schade, dachte das geht eleganter.
am 14. November 2008 wurde mit MySQL 5.1.30 die Version 5.1 zur aktuellen Version. Version 5.0.15 war am 19. Oktober 2005 die erste Produktionsversion der 5.0-Reihe, selbst der erweiterte Support für MySQL 4.0 ist inzwischen ausgelaufen. Wie wäre es mit einer Aktualisierung?
Der Umstieg von 4.0 auf eine 5.0 oder 5.1 will gut getestet sein, weil es nicht nur jede Menge neue (und wichtige) Features gibt, sondern auch völlig kaputtes Verhalten (auf das sich viele Anwendungen durchaus verließen) abgestellt wurde - was zur Inkompatibilität mit den kaputten alten Anwendungen führt(e), die sich auf kaputtes Verhalten stütz(t)en.
Ich persönlich möchte jedoch keine Verantwortung für ein Projekt übernehmen, das unter MySQL 4.x noch eingesetzt werden muss. Ich rate aus Sicherheitsgründen dringend von aufwendiger Neuentwicklung für tote Versionen ab. Dies gilt für MySQL unter 5.0 genauso wie für PHP-4.x.
Freundliche Grüße
Vinzenz
erweiterte Support für MySQL 4.0 ist inzwischen ausgelaufen. Wie wäre es mit einer Aktualisierung?
Tja,
leider habe ich keinen Einfluss auf die Datenbank Version die vom Hoster gestellt wird...
Grüße,
der Kurti
Mahlzeit Kurti,
leider habe ich keinen Einfluss auf die Datenbank Version die vom Hoster gestellt wird...
Natürlich ... Du könntest z.B. den Hoster wechseln. Hoster, die eine antiquierte und vom Hersteller nicht mehr supportete Version einer Software produktiv einsetzen, sind im eigenen Interesse zu meiden.
MfG,
EKKi
echo $begrüßung;
leider habe ich keinen Einfluss auf die Datenbank Version die vom Hoster gestellt wird...
Manchmal ist aus Kompatibilitätsgründen zu alten Scripten _auch_noch_ eine alte Version von MySQL im Einsatz und eine neue lässt sich im Konfigurationstool des Hosters wählen. Wenn nicht, hast du zumindest die Möglichkeit, mit dem Hoster in Kontakt zu treten und nach einer aktuellen Version zu fragen.
Unabhängig davon tät mich interessieren, wie Vinzenz (mit einer aktuellen Version) das Problem mit (einer) Unterabfrage(n) lösen wollen würde.
echo "$verabschiedung $name";
echo $begrüßung;
arbeite mit MySql (niedrige 4er Version - glaub ich) und PHP 5
Es gibt von MySQL 4 nur die Versionen 4.0 und 4.1. Beide unterscheiden sich aber erheblich. Jedoch ist dein Problem mit beiden Versionen nicht elegant lösbar, jedenfalls meines Wissens nach.
Habe eine Tabelle mit Bestellungen und möchte aus dieser Tabelle die Top Ten Produkte je Land auswählen. Ich kann die Top Ten Produkte insgesamt wählen, und ich kann für jedes Land eine eigene Abfrage schreiben und mir die jeweiligen Top Ten ausgeben lassen, aber nicht für alle Länder...
Auf letzteres wird es hinauslaufen. Zuerst die Länder ermitteln, dann einzeln die TopTen pro Land abfragen. Das ist nicht sehr schön, denn viele Abfragen bedeuten viel Overhead. Mit Prepared Statements (erhältlich ab MySQL 4.1 und mit PHPs mysqli-Extension) kannst du immerhin bei den wiederkehrenden Anfragen etwas Aufwand sparen.
einfaches LIMIT 10 hilft da nicht ;-)
LIMIT wirkt erst ganz am Ende. Wenn die Ergebnismenge schon feststeht, kann man die noch nach einer Anzahl einschränken. Gruppen zu je x Datensätzen zu bilden ist jedoch nicht möglich.
Mit MySQL 5 könnte man den Vorgang in eine Stored Procedure packen, aber am Grundprinzip ändert sich dadurch nichts.
echo "$verabschiedung $name";