php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.05.2005, 03:28  
Gast
 
Beiträge: n/a
Standard [Erledigt] SELECT: ORDER BY funktioniert nicht

Hallo
Ich hab ein Script das folgendes tut:
In einer Datenbank sind zu einer Umfrage Antwortmöglichkeiten drin.
Die Felder sind:
text (Titel der Antwortmöglichkeit)
poll (ID des betreffenden Polls (andere Tabelle))
anzahl (Anzahl wie oft die Möglichkeit gevotet wurde)
ID (ID halt)

Alles feldtyp text bis auf ID (INT + auto_increment)

Das Script hat eine Query drin die DESC abfragen soll. Tut sie aber nicht. Ich kann keine Regelmäßigkeit erkennen.
Er Sortiert z.b. 3 -> 27 -> 14.
Hab schon probiert ASC abzufragen und dann wieder DESC zu machen.
Bring nix. Mit ASC isses zwar anders herum aber genauso falsch.
Die Query sieht so aus:
PHP-Code:
<?php
mysql_query
("SELECT anzahl,text FROM polls_antworten WHERE poll = $umfrage ORDER BY 'anzahl' DESC");
?>
Das is das Script:
PHP-Code:
<?php

    
// von allen antwortmöglichkeiten zur gewählten umfrage die anzahl wie oft sie gevotet wurden abfragen
    
$result mysql_query("SELECT anzahl FROM polls_antworten WHERE poll = $umfrage");
    
// anzahl der stimmen insgesamt sind bislang 0
    
$stimmeninsgesamt 0
    while(
$row mysql_fetch_array($result)) {
        
// von jeder antwortmöglichkeit werden stimmen gezhält und addiert
        
$stimmeninsgesamt $row["anzahl"]+$stimmeninsgesamt
    }
    
// wurden schon antworten getätigt?
    
if($stimmeninsgesamt == 0) {
        
// falls nicht, meldung ausgeben
        
echo "Noch keine Stimmen vorhanden!";
    } else {
        
// andernfalls mit der auswertung beginnen
        // ausgeben wieviel stimmen insgesamt schon abgegeben wurden
        
echo "Insgesamt $stimmeninsgesamt Stimmen


"
;
        
// diese variable wird in der folgenden while schleife am ende auf 0 geseltzt
        // so wird eine aktion nur ausgeführt wenn es der erste durchlauf der whileschleife ist
        
$erstes 1;
        
// anzahl der votes und text zu allen antwortmöglichkeiten zur gewählten umfrage abfragen
        // die abfrage ist geordnet vom am meißt gevoteten zum am wenigst gevoteten, damit man die 
        // hochstgewählte antwort als 100% breite anziegen kann und dazu in richtiger relation die anderen 
        
$result mysql_query("SELECT anzahl,text FROM polls_antworten WHERE poll = $umfrage ORDER BY 'anzahl' DESC");
        while(
$row mysql_fetch_array($result)) {
            
$text $row["text"];
            
$anzahl $row["anzahl"];
            if(
$erstes == 1) {
                
// wenn es der erste durchlauf der while schleife ist, also die meißt gewählte
                // antwortmöglichkeit, wird hier ausgerechnet wie breit, wenn diese antwortmöglichkeit
                // 100% breite haben soll, ein prozent ist.
                
$eins 100/$anzahl;
                
// die kalkulation ist abgeschlossen. 
                // nun wird makiert dass bei zukünftigen durläufen keine kalkulation mehr erfolgt
                
$erstes 0;
            }
            
// nun wird für die umfrage die richtige balkenbreite ausgerechnet
            // (bei der ersten kommt natürlich wieder 100 raus
            
$prozent $eins*$anzahl;
            
// ausgabe der aktuellen umfrageantwort
            // titel , anzahl wie oft dafür gestimmt wurde und % des 
            // stimmanteils (gerundet auf ganze zahl) ausgeben
            
echo "$text ($anzahl Stimmen, ".ceil(100/$stimmeninsgesamt*$anzahl)."%\n)";
            
// balken ausgeben mit der richtigen prozentbreite
            // der breiteste ist 100%
            
echo "<hr align=\"left\" size=\"15\" color=\"#000000\" noshade width=\"".$prozent."%\">\n
\n"
;
        } 
// while schleife ist zu ende, alle antwortmöglichketen wurden ausgegeben
?>
Die Tabelle sieht so aus:
PHP-Code:
<?php
CREATE TABLE 
`polls_antworten` (
  `
texttext NOT NULL,
  `
polltext NOT NULL,
  `
anzahltext NOT NULL,
  `
IDint(11NOT NULL auto_increment,
  
PRIMARY KEY  (`ID`)
TYPE=MyISAM AUTO_INCREMENT=;


INSERT INTO `polls_antwortenVALUES ('Ja!''1''27'1);
INSERT INTO `polls_antwortenVALUES ('Egal!''1''14'2);
INSERT INTO `polls_antwortenVALUES ('Nein!''1''3'3);
    
?>
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.05.2005, 03:29  
Gast
 
Beiträge: n/a
Standard

hmm mir fällt grad noch ein.
ich könnte alles in ein array schreiben und das dann sortieren... evtl geht das.. aber muss dass sein
  Mit Zitat antworten
Alt 16.05.2005, 03:45  
Gast
 
Beiträge: n/a
Standard

hmm evtl is "anzahl" irgendwie ein name den man nicht hernehmen darf?
hatte schon oft fehler wegen sowas... da kommt mir gerade "alter" (lebensalter) in meiner userdatenbank in den sinn.
nur bei anzahl kommt man ja nich drauf dass das sowas sein könnte. naja evtl isses ja nich so, aber irgendwas muss die falsche ausgabe ja verursachen. das wär blos doof weil ich dann in allen scripten das ändern muss. hmm naja ich check das mal .
  Mit Zitat antworten
Alt 16.05.2005, 03:55  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von darkdaemonlord
hmm evtl is "anzahl" irgendwie ein name den man nicht hernehmen darf?
hatte schon oft fehler wegen sowas... da kommt mir gerade "alter" (lebensalter) in meiner userdatenbank in den sinn.
nur bei anzahl kommt man ja nich drauf dass das sowas sein könnte. naja evtl isses ja nich so, aber irgendwas muss die falsche ausgabe ja verursachen. das wär blos doof weil ich dann in allen scripten das ändern muss. hmm naja ich check das mal .
naja hilfe zur selbsthifle bietet das board sicher, aber das war nicht das prob
  Mit Zitat antworten
Alt 17.05.2005, 18:51  
Gast
 
Beiträge: n/a
Standard

also ich hab mal den feld typ auf decimal gemacht. das scheint nun zu gehen ...
was ist das genau für ein feld? decimal -> für zahlen. denk ich einfach mal. aber gibts irgendwie ein maximum oder hab ich auf einmal kommastellen drin oder bringt der insert nen fehler wenn ich "" mache?
http://help.scibit.com/Mascon/mascon...eld_Types.html
da is ne schöne beschreibung aber kann mir dad mal wer auf gut deutsch näherbringen?
  Mit Zitat antworten
Alt 17.05.2005, 19:40  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

Zitat:
<?php
mysql_query("SELECT anzahl,text FROM polls_antworten WHERE poll = $umfrage ORDER BY 'anzahl' DESC");
?>
ähm warum setzt du anzahl in anführungszeichen? Jetzt sortiert er das nach dem string "anzahl" absteigend *lol* und der string anzahl wird bei allen zeilen gleich sein.

schreib stattdessen
PHP-Code:
<?php
mysql_query
("SELECT anzahl,text FROM polls_antworten WHERE poll = '".$umfrage."' ORDER BY anzahl DESC"); 
//oder
mysql_query("SELECT anzahl,text FROM polls_antworten WHERE poll = '".$umfrage."' ORDER BY `anzahl` DESC"); 
?>
Buhmann ist offline   Mit Zitat antworten
Alt 18.05.2005, 10:32  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Dein Script sortiert (abgesehen von dem von Buhmann genannten Fehler) schon richtig. Wenn du nach einen Text-Attribut sortierst, dann wird auch alphanummerisch sortiert, genauso, wie du es erhälst. Falls du deine Attribute unbedingt vom Typ TEXT haben willst - sind immerhin 65'536 Bytes, d.h. ein ganzes Buch, pro Feld - dann musst du mit
Code:
ORDER BY anzahl + 0 DESC
sortieren, um ein nummerisches Resultat zu erhalten. Aber vernünftiger wäre natürlich, korrekte DatenTypen zu verwenden. Ausserdem ist "text" ein reserviertes Wort und sollte nicht als Attribut-Name verwendet werden.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 19.05.2005, 14:34  
Gast
 
Beiträge: n/a
Standard

Dein Fehler liegt hier:

PHP-Code:
<?php
CREATE TABLE 
`polls_antworten` (
  `
texttext NOT NULL,
  `
polltext NOT NULL,                // Nehm hier INT(15)
  
`anzahltext NOT NULL,            // Int 15
  
`IDint(11NOT NULL auto_increment,
  
PRIMARY KEY  (`ID`)
TYPE=MyISAM AUTO_INCREMENT=;


INSERT INTO `polls_antwortenVALUES ('Ja!''1''27'1);
INSERT INTO `polls_antwortenVALUES ('Egal!''1''14'2);
INSERT INTO `polls_antwortenVALUES ('Nein!''1''3'3);
?>
Bein text wird zb. 27 vor 4 aber nach 112 angeordnet, da das text ist und bei INT gehts dann schließlich ...

Falls du noch ne funktion zum färben brauchst :

PHP-Code:
<?php
$colorarray
=array("0" => "red",
                   
"1" => "yellow",
                   
"2" => "blue",
                   
"3" => "green",
                   
"4" => "orange",
                   
"5" => "purple",
                   
"6" => "gray");
 
 function 
color_the_box($array$zahl)
{
   foreach(
$array as $key => $elem)
   {
   if(
$key == $zahl) { $color $elem; }
   }
   return 
$color;
}

// Und in der letzen MySQL Anweisung folgendes:
$result = @mysql_query("SELECT anzahl,text FROM polls_antworten WHERE poll='".$umfrage."' ORDER BY 'anzahl' DESC");
       
$zahl 0;
       while(
$row = @mysql_fetch_array($result)) {
       
       
          
$text $row["text"];
          
$anzahl $row["anzahl"];
          if(
$erstes == 1) {
             
// wenn es der erste durchlauf der while schleife ist, also die meißt gewählte
             // antwortmöglichkeit, wird hier ausgerechnet wie breit, wenn diese antwortmöglichkeit
             // 100% breite haben soll, ein prozent ist.
             
$eins = (100 $anzahl);
             
// die kalkulation ist abgeschlossen.
             // nun wird makiert dass bei zukünftigen durläufen keine kalkulation mehr erfolgt
             
$erstes 0;
          }
          
// nun wird für die umfrage die richtige balkenbreite ausgerechnet
          // (bei der ersten kommt natürlich wieder 100 raus
          
$prozent = ($eins $anzahl);
          
// ausgabe der aktuellen umfrageantwort
          // titel , anzahl wie oft dafür gestimmt wurde und % des
          // stimmanteils (gerundet auf ganze zahl) ausgeben
          
echo $text." (".$anzahl." Stimmen, ".ceil(100/$stimmeninsgesamt*$anzahl)."%\n)";
          
// balken ausgeben mit der richtigen prozentbreite
          // der breiteste ist 100%
       
echo "<hr align=\"left\" size=\"15\" color=\"".color_the_box($colorarray$zahl)."\" noshade width=\"".$prozent."%\">\n\n";
       
// echo $zahl; <- Zum debuggen // davorweg ;)..
       
$zahl++;
       } 
// while schleife ist zu ende, alle antwortmöglichketen wurden ausgegeben


?>
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage = "SELECT * FROM links ORDER BY id" Taktaky PHP Tipps 2008 2 22.08.2007 14:37
order by erweiterung . frage zum verst�ndnis... Promaetheus Datenbanken 5 07.12.2005 14:26
SELECT funktioniert nicht PHP Tipps 2007 5 16.11.2005 17:10
SELECT um eine Bedingung erweitern ?! Datenbanken 2 22.10.2005 10:09
Probleme mit Inner Select Datenbanken 0 19.10.2005 15:22
selbst gelöst! Select <option> kleines Problem Dropdow 24bits PHP Tipps 2005-2 0 15.10.2005 19:19
Kontakrformular funktioniert nur zum Teil PHP Tipps 2005-2 12 18.07.2005 11:24
[Erledigt] einfacher SELECT funktioniert nicht! (Illegal mix of coll..) 18inch Datenbanken 1 10.07.2005 19:47
[Erledigt] Select Statement - Order by Problem mit Datentypen Datenbanken 6 03.06.2005 16:02
[Erledigt] SELECT in SELECT PHP Tipps 2005 5 06.04.2005 22:30
[Erledigt] [gelöst] MySQL abfrage eingrenzen anhand einer SELECT Auswah Datenbanken 13 01.12.2004 18:42
Select FROM tabelle ORDER BY id LIMIT 1,10 funkt nicht richt juhuwoorps Datenbanken 6 12.09.2004 14:02
selektierter wert in select box anzeigen PHP Tipps 2004 6 30.08.2004 13:49
DISTINCT oder ORDER BY unknownsoul Datenbanken 5 20.08.2004 12:12
Select mit Order By ... andrew22 Datenbanken 8 29.07.2004 12:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
order by funktioniert nicht, select order by funktioniert nicht, php mysql_query select where text, order by geht nicht php, order by klappt nicht, where und order by geht nicht php, php5 mysql_query where order by abfrage geht nicht, php text orderby, order of war funktioniert nicht, order by geht nicht mehr, order by text als zahl, order by funktioniert nicht richtig, orderby geht nicht, php select order by, php select order by bei zahlen, order by textfeld als zahl sortieren, warum geht orderby nach select nicht?, order by geht nicht, prozent php, mysql php order by funktioniert nicht richtig? abwohl int

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.