PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Gezielt nach einer Spalte suchen die addiert den größten Wert enthält (http://www.selfphp.de/forum/showthread.php?t=25390)

Oskar 22.09.2014 21:07:49

Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Hallo Forum,

ich suche in einer DB nach der Spalte die addiert den größten Wert enthält.

Allerdings hapert es an dem ORDER BY Statement.

Die Variable $SpalteSpielID ist der Name der Spalte die von 1 bis 306 durchnummeriert sind.

Zur Zeit versuche ich es mit:

PHP-Code:

SELECT SUM($SpalteSpielID)
                    
FROM `Mitspielerpunkte`
                    
WHERE Aktiv=AND Exkludiert=0
                    ORDER BY $SpalteSpielID DESC LIMIT 1 

Bei dieser Abfrage wird mir leider nur der letzte Datensatz angezeigt und nicht der Datensatz mit dem größten addierten Wert.

Bei dieser Abfrage:

PHP-Code:

SELECT SUM($SpalteSpielID)
                    
FROM `Mitspielerpunkte`
                    
WHERE Aktiv=AND Exkludiert=0
                    ORDER BY SUM 
($SpalteSpielIDDESC LIMIT 1 

erhalte ich diese Fehlermeldung: FUNCTION DB0000000.SUM does not exist.

Ja ich habe schon gegoogelt etc. finde aber leider keine Lösung für mein Problem. Falls mir jemand auf die Sprünge helfen kann würde ich mich sehr freuen.


Gerade eben probiert:

PHP-Code:

SELECT SUM($SpalteSpielID) AS Spalte
                    FROM 
`Mitspielerpunkte`
                    
WHERE Aktiv=AND Exkludiert=0
                    ORDER BY Spalte DESC LIMIT 1 

Funktioniert leider ebenfalls nicht.

pguser 23.09.2014 07:06:18

AW: Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Zitat:

Zitat von Oskar (Beitrag 146987)
Hallo Forum,

ich suche in einer DB nach der Spalte die addiert den größten Wert enthält.

Zeig mal bitte Deine Tabellenstruktur. Ich ahne schlimmes...

Oskar 23.09.2014 23:31:53

AW: Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Tabellenstruktur ist folgende:

1. Spalte ist die Benutzer ID als Timestamp abgespeichert unter varchar(11)
2. bis 307. Spalte ist die SpielID abgespeichert als tinyint(3)


BenutzerID SpielID306 SpielID305 SpielID304


1403635609 ----------1-------------3 -----------3

1404106862 ----------1-------------3------------1

1406230481-----------1-------------3------------1

1408648317-----------1-------------1------------3


Jetzt hätte ich gerne das ich als Sortierung bzw. einzige Anzeige die SpielID 305 mit 10 Punkten bekomme.

pguser 24.09.2014 09:03:28

AW: Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Zitat:

Zitat von Oskar (Beitrag 146993)
Tabellenstruktur ist folgende:

1. Spalte ist die Benutzer ID als Timestamp abgespeichert unter varchar(11)
2. bis 307. Spalte ist die SpielID abgespeichert als tinyint(3)

Das übertrifft die schlimmsten Erwartungen.


Zitat:

BenutzerID SpielID306 SpielID305 SpielID304


1403635609 ----------1-------------3 -----------3

1404106862 ----------1-------------3------------1

1406230481-----------1-------------3------------1

1408648317-----------1-------------1------------3


Jetzt hätte ich gerne das ich als Sortierung bzw. einzige Anzeige die SpielID 305 mit 10 Punkten bekomme.
Ich versteh nur Bahnhof, denke aber, es ist auch nicht wert, darüber länger nachzudenken. Wirf das weg und beschäftige Dich mit Normalisierung und Datentypen und allgemein Tabellendesign.

Oskar 24.09.2014 14:15:16

AW: Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Zitat:

Zitat von pguser (Beitrag 146997)
Ich versteh nur Bahnhof, denke aber, es ist auch nicht wert, darüber länger nachzudenken.

Danke für die nette und überaus fachliche Hilfestellung.

pguser 24.09.2014 15:30:42

AW: Gezielt nach einer Spalte suchen die addiert den größten Wert enthält
 
Zitat:

Zitat von Oskar (Beitrag 147005)
Danke für die nette und überaus fachliche Hilfestellung.

Dein Problem wenn Du die Hinweise auf Normalisierung offenbar misachtest.

Wenn ich Deine Frage im ersten Post richtig verstehe wäre Deine Lösung in etwa folgendes:

Code:

test=*# select * from oskar ;
 spieler | spiel | wert
---------+-------+------
      1 |    1 |  10
      1 |    2 |  12
      1 |    3 |    9
      2 |    1 |    8
      2 |    2 |    6
      2 |    3 |    5
      3 |    1 |  100
      3 |    2 |  150
      3 |    3 |  122
(9 rows)

Time: 0,192 ms
test=*# select spiel, sum(wert) from oskar group by spiel order by sum(wert) desc limit 1;
 spiel | sum
-------+-----
    2 | 168
(1 row)


306 Spalten wie von Dir gezeigt ist schlicht FAIL, ebenso die Datentypen. Um auf "Benutzer ID als Timestamp abgespeichert unter varchar(11)" braucht man schon sehr harte Drogen - und die in schlechter Qualität.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:32:40 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.