PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql tabelle anders ordnen



heatshock
22.02.2008, 14:39
$sql = "SELECT
id,
username,
klick,
FROM
login
ORDER BY
klick DESC;";
so meine abfrage...
wenn ich die tabelle jetz aus gebe erhalte ich
______________
|2|HeatshocK1|2|
|1|HeatshocK|10|

jetz woll ich fragen wie mann es so machen kann:
________________
|2|HeatshocK1|100|
|1|HeatshocK |10|
|3|wwwwwww | 9|
|4|asdasfdaffff | 3|

2called-chaos
22.02.2008, 15:25
$sql ="SELECT id, username, klick FROM login ORDER BY klick DESC";

Wieso dieser sinnlose aufbau? du hast nach dem Desc ein semicolon gemacht!

Mfg

Chaos

JambaRatte
23.02.2008, 14:21
Also ich persönlich halte den aufbau für wesentlich besser, als alles in eine zeile zu quetschen. Wenn man jetzt einen größeren sql-query, der mehrere joins, sortierungen, subqueries oder ähnliches hat, in eine zeile packt wird das total unübersichtlich:


$sql = 'SELECT
tabelle1.spalte1,
tabelle1.spalte2,
tabelle1.spalte3,
tabelle2.spalte1 AS t2_spalte1,
tabelle2.spalte2 AS t2_spalte2
COUNT(*) AS rows
FROM tabelle1 AS tabelle1
LEFT JOIN tabelle2 AS tabelle2 ON (tabelle2.spalte1 = tabelle1.spalte1)
RIGHT JOIN tabelle3 AS tabelle3 ON (tabelle3.spalte1 = tabelle2.spalte2)
WHERE
tabelle1.spalte3 > 5
AND tabelle2.spalte2 == "muh"
AND tabelle3.spalte1 <> NULL
GROUP BY
tabelle1.spalte3
ORDER BY
tabelle1.spalte1 ASC,
tabelle3.spalte1 DESC
LIMIT 0,10';
VS

$sql = 'SELECT tabelle1.spalte1, tabelle1.spalte2, tabelle1.spalte3, tabelle2.spalte1 AS t2_spalte1, tabelle2.spalte2 AS t2_spalte2 COUNT(*) AS rows FROM tabelle1 AS tabelle1 LEFT JOIN tabelle2 AS tabelle2 ON (tabelle2.spalte1 = tabelle1.spalte1) RIGHT JOIN tabelle3 AS tabelle3 ON (tabelle3.spalte1 = tabelle2.spalte2) WHERE tabelle1.spalte3 > 5 AND tabelle2.spalte2 == "muh" AND tabelle3.spalte1 <> NULL GROUP BY tabelle1.spalte3 ORDER BY tabelle1.spalte1 ASC, tabelle3.spalte1 DESC LIMIT 0,10';


Ansonsten wundert es mich, dass heatshock überhaupt irgendwas als ergebnis seiner abfrage bekommt, denn in seinem query ist ein ganz offensichtlicher syntax-fehler:

$sql = "SELECT
id,
username,
klick, <--- komma darf da nicht hin
FROM
login
ORDER BY
klick DESC;";
Das simikolon ist zwar aus performance-gründen schlecht, sollte aber eigentlich keine große auswirkungen in diesem query haben.
MySQL müsste hier nen error #1064 zurückgeben.

heatshock
23.02.2008, 23:05
ja ohne das komma ich hab noch 2 spalten weggenommen.. und hab komma vergessen aber wie mach ich das dann das es so wie oben beschrieben wurde geht...
so?
tabelle1.spalte1 ASC,

?

JambaRatte
24.02.2008, 12:12
Ich verstehe nicht wirklich, wie du das haben möchtest...

Soll aus diesem code


-------------------
|1|HeatshocK |10|
|2|HeatshocK1 | 2|
|3|wwwwwww | 9|
|4|asdasfdaffff| 3|
-------------------


SELECT
login.id,
login.username,
login.klick
FROM login
ORDER BY login.id ASC

Das werden:


-------------------
|1|HeatshocK |10|
|3|wwwwwww | 9|
|4|asdasfdaffff| 3|
|2|HeatshocK1 | 2|
-------------------



SELECT
login.id,
login.username,
login.klick
FROM login
ORDER BY login.klick DESC
Sodass alle reihen nach klick sortiert werden und die zusammenhänge (ID 1 steht für HeatshocK, der 10 klicks hat, ID 2 für HeatshocK1, der 2 klicks hat, usw) bestehen bleiben?

Oder möchtest du, dass daraus


-------------------
|1|HeatshocK |10|
|2|HeatshocK1 | 9|
|3|wwwwwww | 3|
|4|asdasfdaffff| 2|
-------------------
wird?
Dabei ist immernoch nach ID geordnet, aber gleichzeitig nach klicks. Der zusammenhang geht da natürlich komplett verloren... (Der mit der kleinsten ID hat auch die größten klicks, der mit der zweitgrößten ID hat die zweitgrößte anzahl an klicks, usw).
Denn so wüsste ich nicht, wie das in einem query zu lösen wäre, nur in 2.