PHP MySQL Abfrage sortieren
dennislasch
- php
0 Vinzenz Mai0 Tom0 Rouven0 Vinzenz Mai
0 Tastenputzer
Hello,
ich habe ein Script, das pro Datensatz in Tabelle x, eine Zeile einfügt. Darin habe ich nochmal eine Abfrage von Tabelle y pro abgerufene Zeile aus Tabelle x.
PHP Code:
# Abfragen
$n1 = 'SELECT year, number FROM `x` ORDER BY '.$field.' '.$sort;
$n2 = mysql_query($n1);
# Pro Ausgabe
while($row = mysql_fetch_object($n2)) {
# Anzahl
$res = mysql_query('SELECT COUNT(id) AS anzahl FROM `y` WHERE `issue`='.$row->number.$row->year);
$ty = mysql_fetch_array($res);
}
Nach einem Feld in Tabelle x zu sortieren ist kein Problem. Aber wenn ich jetzt z.B. nach der Anzahl in Tabellee y das Ganze sortieren will, weiß ich nicht weiter.
Gibt es eine andere Möglichkeit als das Ganze erst in einen Array zu speichern und den nach kompletter Abfrage auszugeben?
Danke für eure Hilfe.
Regards,
Dennis
Hallo Dennis,
welche MySQL-Version verwendest Du?
ich habe ein Script, das pro Datensatz in Tabelle x, eine Zeile einfügt. Darin habe ich nochmal eine Abfrage von Tabelle y pro abgerufene Zeile aus Tabelle x.
So was macht man nicht. Es gibt Joins
$n1 = 'SELECT year, number FROM x
ORDER BY '.$field.' '.$sort;
while($row = mysql_fetch_object($n2)) {
Das tut weh. Sowas macht man nicht. Sowas vermeidet man unter nahezu allen
Umständen. Abfragen in einer Schleife deutet in nahezu allen Fällen auf
anfängerhafte Fehler hin.
$res = mysql_query('SELECT COUNT(id) AS anzahl FROM
y
WHEREissue
='.$row->number.$row->year);
Aber wenn ich jetzt z.B. nach der Anzahl in Tabellee y das Ganze sortieren will, weiß ich nicht weiter.
Gibt es eine andere Möglichkeit als das Ganze erst in einen Array zu speichern und den nach kompletter Abfrage auszugeben?
Wozu? Vergiß PHP! Nimm SQL!
Ich vermute, dass folgende Query das liefert, was Du haben möchtest.
SELECT
COUNT(y.id) AS anzahl,
x.number,
x.year
FROM
y
INNER JOIN
x
ON
y.issue = CONCAT(x.number, x.field)
GROUP BY
x.number,
x.year
ORDER BY anzahl
In Abhängigkeit von Deinen (leider unbekannten) Daten könnte auch eine leicht
modifizierte Version erforderlich sein. Falls meine Abfrage nicht das gewünschte Ergebnis liefert, so bitte ich Dich darum ein paar Beispieldaten und das daraus sich ergebende Resultat zu posten - mit der Begründung, warum
Du dieses Resultat haben möchtest.
Freundliche Grüße
Vinzenz
Hello Vinzenz,
while($row = mysql_fetch_object($n2)) {
Das tut weh. Sowas macht man nicht. Sowas vermeidet man unter nahezu allen
Umständen. Abfragen in einer Schleife deutet in nahezu allen Fällen auf
anfängerhafte Fehler hin.
Wo siehst Du da eine Abrage in einer Schleife?
Du meintest mit "Abfrage" doch Mysaql_Query()?
Ich sehe da nur das Auslesen des Abfrageergebnisses in einer Schleife und das machet 'man' doch eigentlich immer so. Sollte ich mich da irren?
Ich kann Dir alos gerade nicht folgen...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
Ich sehe da nur das Auslesen des Abfrageergebnisses in einer Schleife und das machet 'man' doch eigentlich immer so. Sollte ich mich da irren?
ist das ein Wink mit dem Zaunpfahl auf ungenaue Zitierweise? Schau in den Originalquellcode - es läuft eine Schleife und innerhalb der Schleife wird auf Basis des von Vinzenz zitierten $row-Arrays eine weitere Abfrage gemacht.
MfG
Rouven
Hallo Tom,
while($row = mysql_fetch_object($n2)) {
Das tut weh. Sowas macht man nicht. Sowas vermeidet man unter nahezu allen
Umständen. Abfragen in einer Schleife deutet in nahezu allen Fällen auf
anfängerhafte Fehler hin.Wo siehst Du da eine Abrage in einer Schleife?
Du meintest mit "Abfrage" doch Mysaql_Query()?
in dem Teil, den Du entweder überlesen oder unterschlagen hast. Jedenfalls hast Du die nächsten Codezeilen, die direkt darunter standen, nicht zitiert:
$res = mysql_query('SELECT COUNT(id) AS anzahl FROM
y
WHEREissue
='.$row->number.$row->year);
Ich sehe da nur das Auslesen des Abfrageergebnisses in einer Schleife und das machet 'man' doch eigentlich immer so. Sollte ich mich da irren?
Ja, selbstverständlich irrst Du. Man liest nicht Ergebnisse aus, um eine (oder hier zwei Spalten) jeder Zeile für viele, viele weitere Queries zu verwenden.
Das macht man nicht, da baut man einen Join von Hand zu Fuß nach. Das ist
anfängerhaft - und bei PHP-Programmierern ohne SQL-Kenntnisse oft zu sehen.
Ich kann Dir alos gerade nicht folgen...
Lesen hilft ;-)
Freundliche Grüße
Vinzenz
Hallo Dennis,
welche MySQL-Version verwendest Du?
ich habe ein Script, das pro Datensatz in Tabelle x, eine Zeile einfügt. Darin habe ich nochmal eine Abfrage von Tabelle y pro abgerufene Zeile aus Tabelle x.
So was macht man nicht. Es gibt Joins
$n1 = 'SELECT year, number FROM
x
ORDER BY '.$field.' '.$sort;while($row = mysql_fetch_object($n2)) {
Das tut weh. Sowas macht man nicht. Sowas vermeidet man unter nahezu allen
Umständen. Abfragen in einer Schleife deutet in nahezu allen Fällen auf
anfängerhafte Fehler hin.$res = mysql_query('SELECT COUNT(id) AS anzahl FROM
y
WHEREissue
='.$row->number.$row->year);Aber wenn ich jetzt z.B. nach der Anzahl in Tabellee y das Ganze sortieren will, weiß ich nicht weiter.
Gibt es eine andere Möglichkeit als das Ganze erst in einen Array zu speichern und den nach kompletter Abfrage auszugeben?
Wozu? Vergiß PHP! Nimm SQL!
Ich vermute, dass folgende Query das liefert, was Du haben möchtest.
SELECT
COUNT(y.id) AS anzahl,
x.number,
x.year
FROM
y
INNER JOIN
x
ON
y.issue = CONCAT(x.number, x.field)
GROUP BY
x.number,
x.year
ORDER BY anzahl
>
> In Abhängigkeit von Deinen (leider unbekannten) Daten könnte auch eine leicht
> modifizierte Version erforderlich sein. Falls meine Abfrage nicht das gewünschte Ergebnis liefert, so bitte ich Dich darum ein paar Beispieldaten und das daraus sich ergebende Resultat zu posten - mit der Begründung, warum
> Du dieses Resultat haben möchtest.
>
>
> Freundliche Grüße
>
> Vinzenz
Hallo zusammen,
musste mir grad mal wieder meinen Teil denken: So macht man das doch nicht - hehe, und wie macht man das dann? LOL
Ich hätte da eine Idee: Wenn ich wissen möchte, wieviel Daten in einer Abfrage sind, dann nutze ich die mysql\_num\_rows Funktion.
Die kannst Du einfach unter Deine Abfrage stellen, brauchst da keine Extra Anfrage an die Datenbank für stellen.
Ich hoffe, dass Dir das im Moment weiterhilft
Liebe Grüße aus dem Ruhr-Gebiet
Edgar
[Professionelle Internetauftritte](http://www.ruhr-promotion.de) [Kostenloser Homepagetest](http://service.ruhr-promotion.de/homepage-test/index.html)
Hallo Edgar,
musste mir grad mal wieder meinen Teil denken: So macht man das doch nicht -
ja, Fullquotes sind keine gute Idee.
Ich hätte da eine Idee: Wenn ich wissen möchte, wieviel Daten in einer Abfrage sind, dann nutze ich die mysql_num_rows Funktion.
entweder kriegt man nicht die gewünschte Anzahl "pro Ausgabe" oder man fragt
wieder in Serie ab, nur um die erhaltenen Daten im Prinzip unbenutz wegzuwerfen.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
entweder kriegt man nicht die gewünschte Anzahl "pro Ausgabe"
da kenn ich aber anders. Hast du evtl die Abfrage mit LIMIT begrenzt?
Also ich persönlich benutze die Abfrage um hinter Links anzuzeigen, wieviel Seiten noch dahinter folgen, und das klappt prima.
Schick mir doch mal den Code per Mail, zwischen den Feiertagen hab ich etwas Zeit, ich gugg mir das mal in Ruhe an.
Denn: Geht net, gibts net, ;-)
In diesem so langsam schonmal: Besinnliche Feiertage, und nen ordentlichen Rutsch
Edgar
http://service.ruhr-promotion.de/homepage-test/index.html