Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme beim Sortieren [PHP / SQL]

Empfohlene Antworten

Veröffentlicht

Ich habe folgenden code:

function sort_parks($current_year) {
$sql = "SELECT
userid,
nickname,
age,
wohnort,
name
FROM
cbook_users
WHERE
online='1';";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
$i = "1";
while($row = mysql_fetch_assoc($result)) {
$sql_p = "SELECT
parkid
FROM
cbook_besuch
WHERE
jahr='".addslashes(htmlspecialchars($current_year))."'
AND userid='".addslashes(htmlspecialchars($row['userid']))."'
GROUP BY
parkid;";
$result_p = mysql_query($sql_p) OR die(mysql_error());
if(mysql_num_rows($result_p)) {
$daten_p = array();
while($row_p = mysql_fetch_assoc($result_p)) {
$daten_p[] = $row_p['parkid'];
}
$parks = count($daten_p);
} else {
$parks = "0";
}
if($parks > 0) {
echo('<tr>');
echo("<td width=\"25\">".$i.".</td>");
echo("<td width=\"130\"><a href=\"./page1.php?userid=".$_GET['userid']."&showid=".$row['userid']."&jahr=".$current_year."&page=1\">");
if(isset($_SESSION['ID']) && $_SESSION['ID'] == $row['userid'] && $_GET['userid'] == $row['userid']) {
echo("<font color=\"#FF0000\"><b>".$row['nickname']."</b></font>");
} else {
echo($row['nickname']);
}
echo("</a></td><td>".$row['name']."</td><td>".$row['age']."</td><td>".$row['wohnort']."</td>");
echo('<td>');
echo($parks);
echo('</td>');
echo('</tr>');
$i++;
}
}
}
}[/PHP]

Diese Funktion ist eingebettet in eine Tabelle... mit ihr soll man alle User nach der Anzahl besuchter Parks sortieren können.

Die derzeitige Ausgabe sieht ungefähr so aus:

1. Morfois 4

2. Noel 6

3. test 3

Problem hierbei: wie lasse ich den User mit den meisten besuchten Parks in der Liste oben stehen?

Für Vorschläge währe ich sehr dankbar!

Viele Grüße

Morfois

P.S. $current_year ist immer das aktuelle Jahr, dementsprechent derzeit 2006 :o)

Order by Parkbesuche DESC :D

^^ na klasse! wenns so einfach währe, würde ich mich bestimmt ned an euch wenden :-)


SELECT
userid.book_users,
nickname.book_users,
count(park_id.cbook_besuch) as zaehler
FROM
book_users, cbook_besuch
WHERE
online.book_users='1'
AND
userid.book_users = userid.cbook_besuch
AND
jahr ....
GROUP BY
userid.book_users
ORDER BY
zaehler DESC

[/PHP]

so vielleicht ?

mal sehen ^^

Dankeschöööön, funktioniert super! ^^

Ebenfalls funktionsfähig ist diese Lösung:

SELECT count( a.userid ) AS anzahl, a.Jahr, a.userid, nickname, age, wohnort, name

FROM cbook_besuch a

RIGHT JOIN cbook_users b ON a.userid = b.userid

WHERE jahr =2006

GROUP BY userid

ORDER BY anzahl DESC

Hierbei nochmal vielen Dank an Schiller256!

hm.... nun haben ja ein paar user einen park 2 mal besucht.

also zum Beispiel:

Noel war 2 mal im Europa-Park

Morfois war ein mal im Europa-Park und ein mal im Phantasialand

dann soll das ergebnis so aussehen:

Morfois 2

Noel 1


SELECT
userid.book_users,
nickname.book_users,
count(DISTINCT park_id.cbook_besuch, userid.cbook_besuch) as zaehler
FROM
book_users, cbook_besuch
WHERE
online.book_users='1'
AND
userid.book_users = userid.cbook_besuch
AND
jahr ....
GROUP BY
userid.book_users
ORDER BY
zaehler DESC

[/PHP]

wunderbar! :-D

hm... wie sage ich ihm denn dann hierbei, das er die zwei "zaehler" zusammenaddieren soll???

SELECT cbook_users.userid, cbook_users.name, cbook_users.nickname, cbook_users.age, cbook_users.wohnort, count( DISTINCT cbook_kirmes.kirmesid, cbook_kirmes.userid ) AS zaehler
FROM cbook_users, cbook_kirmes
WHERE cbook_users.online = '1'
AND cbook_users.userid = cbook_kirmes.userid
AND jahr = '2006'
GROUP BY cbook_users.userid
UNION
SELECT cbook_users.userid, cbook_users.name, cbook_users.nickname, cbook_users.age, cbook_users.wohnort, count( DISTINCT cbook_ride.rideid, cbook_ride.userid ) AS zaehler
FROM cbook_users, cbook_ride
WHERE cbook_users.online = '1'
AND cbook_users.userid = cbook_ride.userid
AND jahr = '2006'
GROUP BY cbook_users.userid
ORDER BY zaehler DESC[/PHP]

was kommt den als ausgabe raus und was willst du wissen ?

im prinzip das selbe wie oben, nur das es hier um insgesammt 3 tabellen geht.

würde man beide SELECTS seperat ausführen und per PHP die zaehler addieren dann währe dies mein ergebnis, nach dem ich sortieren will!

ich möchte also quasi die anzahl der einträge der tabelle cbook_ride aller user, welche online='1' sind mit denen der tabelle cbook_kirmes addieren, jedoch nicht die wirkliche anzahl, sondern die anzahl der gefahrenen bahnen, d.h. 2 mal eine bahn gefahren bedeutet für den user nicht fahrten == 2 sondern anzahl gefahrener bahnen == 1... plus dann natürlich die anzahl der tabelle cbook_kirmes.

Und danach will ich dann anzahl DESC sortieren! fertig :-)

evtl mit SUM() ?

hab ich schon verschiedene möglichkeiten probiert, aber das funzt ned so dolle.

würde man beide SELECTS seperat ausführen und per PHP die zaehler addieren dann währe dies mein ergebnis, nach dem ich sortieren will!

dann mach das so, was spricht dagegen ? andere Lösungen sehe ich nicht

ja aber dann bekomme ich doch einen fehler in der sortierung. oder etwa nicht?

Oder mit Group By

wie das? :confused:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.