cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
wichtigWir suchen PHP-Entwickler/innen (Freelancer oder Vollzeit)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 69388
Mitglieder online: 0
Gäste online: 5
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: [PHP/MySQL] Ordnen nach anderen Kriterien

Thread: [PHP/MySQL] Ordnen nach anderen Kriterien

Tags: PHP , MySQL , ordnen , kriterien

18.10.2011 17:09 Uhr

 

Status: offline
Hallo!

Ich habe mehere Datenbankabfragen welche dann als Art Userliste ausgegeben werden. Mein Problem ist allerdings, das die Userliste quasi gar nicht geordnet ist. Sprich: Wer zuerst kommt, steht ganz oben.

Jetzt möchte ich aber die Möglichkeit geben, auch nach Punkten sortieren zu können. Ist das mit meinem Code überhaupt möglich, wenn ja: Was muss ich verändern?? Hab wirklich schon viel ausprobiert... Ich bin am verzweifeln...  :conf: 
+ PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
ob_start();
include("header.php");
#############################################
#############################################
echo'
<table style="border:0px;width:100%;" cellpadding="0" cellspacing="0">
<tr bgcolor="#D9DAFF" style="color:#9E9E9E;letter-spacing:1.5px;font-size:1.2em;" width="530">
<td width="40%"><b>Name</b></td><td width="35%"><b>Verm&ouml;gen</b></td><td width="20%"><b>Punkte</b></td><td width="5%">&nbsp;</td>
</tr>';
include("mysql_login.php");
 
#################blätterfunktion
$seite = $_GET["seite"];
if(!isset($seite))
   {
   $seite = 1;
   }
$eintraege_pro_seite = 20;
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
 
#################
$sql = "SELECT * FROM user LIMIT ".$start.", ".$eintraege_pro_seite."";
 
    $result = mysql_query($sql) OR die(mysql_error());
while($userA = mysql_fetch_assoc($result)) {
$col1 = "#e5f0fc";
$col2 = "";
$col3 = "#9E9E9E";
$col4 = "#9E9E9E";
 
for($num=0; $num < 1; $num++)
      {
    $color = ($color == $col1) ? $col2 : $col1;
    $color1 = ($color1 == $col4) ? $col3 : $col4;
echo'<tr bgcolor="'.$color.'" style="color:'.$color1.';height:25px;" width="530"><td style="';
if($userA[rang] == "4"){
echo"text-decoration: line-through;";
}
else
{
echo "text-decoration: none;";
}
echo'"><a href="profil_on.php?userid='.$userA[Id].'" style="color:'.$color1.';">'.$userA[club].'</a></td><td style="';
if($userA[rang] == "4"){
echo"text-decoration: line-through;";
}
else
{
echo "text-decoration: none;";
}
echo'">';
include("mysql_login.php");
 
$sql2 = "SELECT * FROM money WHERE userid= '".$userA[Id]."'";
 
    $result2 = mysql_query($sql2) OR die(mysql_error());
while($userB = mysql_fetch_assoc($result2)) {
$userB2[geld] = number_format($userB[geld], 2, ',', '.');
echo $userB2[geld].'&nbsp;&euro;';
}
echo'</td><td style="';
if($userA[rang] == "4"){
echo"text-decoration: line-through;";
}
else
{
echo "text-decoration: none;";
}
echo'">';
include("mysql_login.php");
 
$sql3 = "SELECT * FROM punkte WHERE userid= '".$userA[Id]."'";
 
    $result3 = mysql_query($sql3) OR die(mysql_error());
while($userC = mysql_fetch_assoc($result3)) {
echo $userC[punkte];
}
echo'</td><td>';
if($userA[rang] == "4"){
echo '&nbsp;';
}
else
{
$nachrichtenlink = htmlspecialchars($userA[Nickname]);
echo '<a href="nachricht_schreiben.php?action='.$nachrichtenlink.'"><img src="images/icons/comment.png" border="0">';
}
 
echo'</a></td>
</tr>';
}
}
echo'</table>';
include("mysql_login.php");
$seiten = mysql_query("SELECT COUNT(*) FROM user");
$menge = mysql_fetch_row($seiten);
$menge = $menge[0];
 
//Errechnen wie viele Seiten es geben wird
$wieviele_seiten = ceil($menge / $eintraege_pro_seite);
 
//Ausgabe der Seitenlinks:
echo '<br><br><center><div style="align:center;width:400px;"><p style="background-color:#1F1F1F;padding:5px;letter-spacing:1.5px;font-size:1.2em;line-height:14px;font-family:tahoma,trebuchet ms,verdana,monospace;color:#9E9E9E;text-align:center;width:350px;border:solid 1px #fff;margin-left:10%;">';
 
 
function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite")
   {
   if(ereg("\?",$url)) $anhang = "&";
   else $anhang = "?";
 
   if(substr($url,-1,1) == "&") {
      $url = substr_replace($url,"",-1,1);
      }
   else if(substr($url,-1,1) == "?") {
      $anhang = "?";
      $url = substr_replace($url,"",-1,1);
      }
 
   if($anzahl%2 != 0) $anzahl++; //Wenn $anzahl ungeraden, dann $anzahl++
 
   $a = $seite-($anzahl/2);
   $b = 0;
   $blaetter = array();
   while($b <= $anzahl)
      {
      if($a > 0 AND $a <= $maxseite)
         {
         $blaetter[] = $a;
         $b++;
         }
      else if($a > $maxseite AND ($a-$anzahl-2)>=0)
         {
         $blaetter = array();
         $a -= ($anzahl+2);
         $b = 0;
         }
      else if($a > $maxseite AND ($a-$anzahl-2)<0)
         {
         break;
         }
 
      $a++;
      }
   $return = "";
   if(!in_array(1,$blaetter) AND count($blaetter) > 1)
      {
      if(!in_array(2,$blaetter)) $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\" style=\"color:#9E9E9E;\">1</a>&nbsp;...";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\" style=\"color:#9E9E9E;\">1</a>&nbsp;";
      }
 
   foreach($blaetter AS $blatt)
      {
      if($blatt == $seite) $return .= "&nbsp;<b>$blatt</b>&nbsp;";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$blatt\" style=\"color:#9E9E9E;\">$blatt</a>&nbsp;";
      }
 
   if(!in_array($maxseite,$blaetter) AND count($blaetter) > 1)
      {
      if(!in_array(($maxseite-1),$blaetter)) $return .= "...&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\" style=\"color:#9E9E9E;\">letzte</a>&nbsp;";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\" style=\"color:#9E9E9E;\">$maxseite</a>&nbsp;";
      }
 
   if(empty($return))
      return  "<b>1</b>&nbsp;";
   else
      return $return;
   }
 
echo blaetterfunktion($seite, $wieviele_seiten);
echo "</p></div></center>";
include("footer.php");
?>
___________________________
Frische Luft?
18.10.2011 17:59 Uhr

 

Status: offline
also erstmal ist der php-code für das sortieren von sql-ergebnissen unerheblich. schließlich lässt man ja den sql-server für sich sortieren  :wink: 

wenn ich das richtig sehe, führst du drei abfragen durch (das "select count" mal ausgenommen):
  • SELECT * FROM user
  • SELECT * FROM money WHERE userid=
  • SELECT * FROM punkte WHERE userid=

wenn du diese drei abfragen einfach zu einer zusammenwirfst (thema join), erhälst du:
mysql:
1
select * from user, money, punkte where money.userid = user.userid and punkte.userid = user.userid
das kannst du nach deinem wunschkriterium sortieren, indem du an die anfrage einfach noch
mysql:
1
order by wunschtabelle.wunschkriterium
anhängst
___________________________
while (!asleep()) sheep++;
18.10.2011 18:54 Uhr

 

Status: offline
Diese Möglichkeit war mir bisher unbekannt  :glad:  Ich werde es direkt mal testen :)

Gibt es sonst noch einen Makel an dem Code?  :glad: 


EDIT
Die Anzeige funktioniert soweit.

Jedoch wird nicht der allgemein größte Wert ganz oben angezeigt, sondern nur der Wert mit der größten Zahl am Anfang.
z.B.:
  • 650
  • 5544
  • 3441
  • 1144458

anstatt
  • 1144458
  • 5544
  • 3441
  • 650


Hat das was mit dem Typ der Tabelle bzw der Spalte [VARCHAR(100)] zu tun?
Es soll nach der Tabelle money geordnet werden. ;) D.h. es sind auch Kommazahlen dabei. :)
4 mal bearbeitet
___________________________
Frische Luft?
18.10.2011 20:05 Uhr

 

Status: offline
Dann würde ich das vielleicht in einen vernünftigen Datentyp schreiben...
___________________________
Besucht meine Homepage: http://www.sammyshp.de/
18.10.2011 20:14 Uhr

 

Status: offline
Recht herzlichen Dank  :wink:  Der Annahme bin ich auch durch meine eigene Intuition gefolgt und habe ein wenig gegoogelt.

Da habe ich herausgefunden, das man ? bzw Geldbeträge in dem Typ DECIMAL abspeichern sollte.
Gesagt getan, habe ich in der Tabelle "money" die Spalte "geld" auf DECIMAL 2,2 umgestellt.

Nun hat jeder User nur noch 0,99?  :shocked: 
___________________________
Frische Luft?
18.10.2011 20:56 Uhr

 

Status: offline
Na hoffentlich hast du das nicht direkt in dem Produktivsystem gemacht (oder wenigstens vorher ein Backup erstellt).
___________________________
C++ ist ein Esel mit Ledersitzen und elektrischen Fensterhebern, Java ist auch eine Insel und Python ist eine Schlange...
19.10.2011 11:39 Uhr

 

Status: offline
Zitat:
nicht direkt in dem Produktivsystem gemacht
Leider doch.
Zitat:
wenigstens vorher ein Backup erstellt
Leider nein.

Aber das macht nichts, ist sowieso nur ein Testlauf  :wink: 


Als welchen Typ sollte ich das denn am besten abspeichern lassen? Oder war DECIMAL 2,2 schon richtig?  :glad: 

Alles klar, die Frage hat sich erübrigt  :wink: 

Danke für die Hilfe Parn  :glad: 
1 mal bearbeitet
___________________________
Frische Luft?
21.10.2011 16:32 Uhr

 

Status: offline
Vielleicht noch ein kleiner Tipp: Man macht aus performance- und sicherheitstechnischen Gründen kein "SELECT * FROM...". Immer die Spalten einzeln angeben, auch wenn es nach mehr Arbeit aussieht.

Lg Headsick
22.10.2011 17:03 Uhr

 

Status: offline
@headsick, da kommts ganz auf die tabelle an. Ich würds jetzt ned generell sagen, dass man es nie verwenden sollte.
1 mal bearbeitet
___________________________
WDKK
http://mc.wdkk.de/
22.10.2011 19:41 Uhr

 

Status: offline
@Kordian10: Hintergrund dafür, kein Select * zu verwenden ist, dass man dadurch gleichbleibende Performance gewährleisten kann, auch wenn irgendwann die Tabellen aufgrund steigender Anforderungen anderer Programmteile erweitert werden müssen. Angenommen du hast eine Tabelle mit 20 Spalten, von denen du nur 10 benötigst. Angenommen du hast alle Spalten als int16 definiert, so belegst du pro Zeile (mindestens) 320 Bit. Die benötigten Daten belegen logischerweise (mindestens) 160 Bit. Für kleine Anwendungen ist sowas sicherlich kein Problem, spätestens wenn man seine 20 Spalten einer Tabelle auf 30 Spalten erweitert und viele Datensätze auslesen muss, kann man zB Speicherprobleme in der Anwendung bekommen.
___________________________
C++ ist ein Esel mit Ledersitzen und elektrischen Fensterhebern, Java ist auch eine Insel und Python ist eine Schlange...
Ähnliche Threads Forum Ähnlichkeitsgrad
 Root-Core - Coding meets GFX Das Promotion-Board 2
 TV Planer Script Probleme (erst mal erledigt) Website & Webprogrammierung 2
 [gelöst] Mit Datum rechnen in PHP mit MySQL Website & Webprogrammierung 2
 PHP, Pfad wird nicht richtig erzeugt Website & Webprogrammierung 2
 [gelöst ]MySQL variablen werden nicht ausgegeben Website & Webprogrammierung 2
 Useraccount Sicherheit Website & Webprogrammierung 2
 [PHP/MYSQL] Zeitgesteuert auf Datenbank zugreifen Website & Webprogrammierung 2
nach obennach oben

Copyright © 2014 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news
ANEXIA - PHP Entwicklung - Web-Entwicklung - Fritz!Box Anrufmonitor für Mac OS - Rolladen, Markisen und Jalousien in Stuttgart - Rolladen in Stuttgart - SMSjobs