SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 01.11.2010, 01:29:04
Atmog Atmog ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 29
Beiträge: 4
Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Hi,
als erstes: Ja, ich habe die SUFU benutzt, aber bin leider auf nichts gestoßen, was ich direkt zur Lösung meines Problems anwenden könnte. Ich hoffe ihr könnt mir helfen. Ich schilder mal das Problem:

Ich habe eine Mysqltabelle mit dem namen "ergebnisse" und diese hat folgende spalten "datum,hans,karl,dieter,jörg". jetzt stehen in den spalten bowlingergebnisse. pro datum macht das je 3 zahlen pro person

Datum-|-Hans-|-Karl-|-Dieter ....
1.1.10--|-120--|-110-|-105...
1.1.10--|-130-|-103--|-....
1.1.10--|-120-|-...
6.1.10--|...
6.1.10...
...

jetzt möchte ich als Ergebnis meiner Abfrage eine Rangfolge haben, die mir die höchsten 10 Ergebnisse aus der gesamten Tabelle liefert. Weiterer Knackpunkt ist der Fall, wenn Ergebnisse unter den Top10 gleich sind. Diese sollen dann nach Datum sortiert werden. Hierbei soll gelten, was älter ist kommt als erstes.

PHP-Code:
    $sql "SELECT
                *
            FROM
                "
.$project_ergebnisliste."
            ORDER BY

                Datum DESC
            LIMIT
                10"
;

    
$result mysql_query($sql) OR die(mysql_error());
    if (
mysql_num_rows($result)){
    while (
$row mysql_fetch_assoc($result)) { 
...
ich bin mir nicht sicher wie ich bei order by, nach der größe sortiere und wie ich als feld die komplette tabelle angeben kann. ich hoffe ihr könnt mir helfen.

gruß atmog
Mit Zitat antworten
  #2  
Alt 01.11.2010, 11:10:15
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 15
Beiträge: 395
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Deine bisherige Tabelle ist leider nicht "normalisiert". Dann tut sich SQL ziemlich schwer, das gewünschte Ergebnis zu liefern. Zudem wird es schwierig, wenn einer der Mitspieler ausscheidet bzw. neue hinzu kommen.

Code:
Datum-|-Hans-|-Karl-|-Dieter ....
1.1.10--|-120--|-110-|-105...
1.1.10--|-130-|-103--|-....
1.1.10--|-120-|-...
6.1.10--|...
6.1.10...
...
Besser wäre es, die bisherigen Daten in zwei Tabellen aufzuteilen z.B. so:

Code:
CREATE TABLE person (
 id INT NOT NULL,
 name VARCHAR(50),
 PRIMARY KEY (id)
);

INSERT INTO person VALUES
( 1, 'Hans'),
( 2, 'Karl'),
( 3, 'Dieter');

CREATE TABLE ergebnis (
 id INT NOT NULL,
 datum DATE NOT NULL,
 person_id INT NOT NULL,
 ergebnis INT NOT NULL,
 PRIMARY KEY (id)
);

INSERT INTO ergebnis VALUES
( 1, '2010-01-01', 1, 120),
( 2, '2010-01-01', 2, 110),
( 3, '2010-01-01', 3, 105);
Mit diesen Tabellen sind die gewünschten Ergebnisse "relativ" leicht ermittelbar.

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #3  
Alt 02.11.2010, 01:37:47
Atmog Atmog ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 29
Beiträge: 4
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Hi,
danke für deine schnelle Hilfe. Die Normalisierung hat mich schon vorran gebracht, auch wenn die Tabelle jetzt wahrscheinlich 600 Zeilen am Ende des Jahres haben wird. Hoffe das geht noch mit der Verarbeitungsgeschwindigkeit. Eventuell melde ich mich nochmal, wenn ich beim weiteren Vorgehen auf "scheinbar unlösbare" Probleme stoße ;)

Also nochmal vielen Dank!

Gruß Atmog
Mit Zitat antworten
  #4  
Alt 05.11.2010, 00:08:53
Atmog Atmog ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 29
Beiträge: 4
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Hi,
ich bin doch noch auf ein Problem gestoßen. Die Rangliste mit ner Abfrage zu generieren klappt jetzt mit der neuen Tabellenstruktur wunderbar, jetzt möchte ich aber noch nen Gesamtschnitt der Spieler haben und diese der Größe nach sortieren.

120,4 Spieler1
110,2 Spieler 2
96,4 Spieler 3

soll dabei rauskommen. Ich würde ungern noch ne weitere Tabelle machen, daher muss die Lösung evtl. in der Abfrage+Verarbeitung liegen? Bin nicht so fit in PHP, aber man kann glaub ich auch iwie Arrays sortieren? Bin aber nicht sicher wie ich das Ergebnis der Abfrage vll. in nem Array abspeichern kann. Vll. wisst ihr ja ein Lösung.

Gruß Atmog
Mit Zitat antworten
  #5  
Alt 05.11.2010, 08:54:21
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 15
Beiträge: 395
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Was verstehst Du unter "Gesamtschnitt" ?

so was..? Hier wird das durchschnittliche Ergebnis alle Spieler berechnet und absteigend sortiert (Der höchste Durchschnitt steht oben).

Code:
SELECT p.name, AVG(ergebnis) AS durchschnitt
  FROM person p
  JOIN ergebnis e
    ON e.person_id = p.id
GROUP BY p.name
ORDER BY durchschnitt DESC;

+--------+--------------+
| name   | durchschnitt |
+--------+--------------+
| Hans   |     120.0000 |
| Karl   |     110.0000 |
| Dieter |     105.0000 |
+--------+--------------+
3 rows in set (0.00 sec)

mysql>
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #6  
Alt 05.11.2010, 14:52:06
Atmog Atmog ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 29
Beiträge: 4
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Hi,
war gar nicht so einfach da durchzusteigen, kannte den Join Befehl nicht, aber ein Thread weiter oben mit nem Bild hats mir dann quasi erklärt. Es funktioniert. Vielen Dank dafür. Und ja mit Gesamtschnitt war der Durchschnitt gemeint.
Eine letzte Frage hätte ich noch. ( ja letzte ;) )
Ich habe jetzt die Struktur der Tabellen wie oben und möchte noch eine letzte Abfrage machen. Ich möchte die besten z.b. 6 Tagesdurchschnitte (Limit 6) der Größe nach mit zugehörigem Namen ausgeben. Unter Tagesdurchschnitt verstehe ich wenn jemand am 2.1.10 130,120,110 bowlt dann 120 für den spieler an dem tag. so gibt es für jeden spieler an jedem tag einen durchschnitt und aus diesem pool sollen die 6 größten raussortiert werden und die namen zugeordnet werden. die ergebnisse sollen dabei erst nach größe, dann nach datum(alt zuerst,ASC) und dann nach id sortiert sein.
Ich denke ich kann das mit ner zusätzlichen Tabelle realisieren, wo ich die durchschnitte eintrage, weil dann hätte ich ja in etwa die gleiche fragestellung wie oben. Aber 2 Tabellen wo eigentl. die gleichen Daten drin sind, kann ja nicht optimal (oder normalisiert? ;) ) sein. Vll. weisst du da ja ne bessere Lösung.

Gruß Atmog
Mit Zitat antworten
  #7  
Alt 05.11.2010, 15:50:30
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 15
Beiträge: 395
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Die sechs größten "Durchschnitte" pro Name oder über alle Namen?

Code:
SELECT p.name, e.datum, AVG(e.ergebnis) AS durchschnitt
  FROM person p
  JOIN ergebnis e
    ON e.person_id = p.id
GROUP BY p.name, e.datum
ORDER BY p.name, e.datum, durchschnitt DESC
LIMIT 6;

+--------+------------+--------------+
| name   | datum      | durchschnitt |
+--------+------------+--------------+
| Dieter | 2010-01-01 |     105.0000 |
| Hans   | 2010-01-01 |     120.0000 |
| Karl   | 2010-01-01 |     110.0000 |
+--------+------------+--------------+
3 rows in set (0.03 sec)

mysql>
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #8  
Alt 05.11.2010, 21:40:47
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 56
Beiträge: 1.044
AW: Doppelte Sortierung einer mysql abfrage über die ganze tabelle

Zitat:
Zitat von Atmog Beitrag anzeigen
... Die Normalisierung hat mich schon vorran gebracht, auch wenn die Tabelle jetzt wahrscheinlich 600 Zeilen am Ende des Jahres haben wird. Hoffe das geht noch mit der Verarbeitungsgeschwindigkeit.....
Also bei dem was du zur Zeit hier an Abfragen hast wirst du bei 600 Einträgen pro Jahr nicht so schnell Performanceprobleme bekommen. ;)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Brauche Hilfe Partygirl MySQLi/PDO/(MySQL) 10 01.03.2011 09:18:11
Feld hinzufügen, in Mysql Tabelle, Tabelle hat aktive Daten juerle PHP Grundlagen 2 19.03.2010 17:54:46
mysql abfrage in tabelle darstellen local PHP Grundlagen 2 15.09.2006 13:55:42
Doppelte Abfrage aus einer anderen Tabelle Skyman MySQLi/PDO/(MySQL) 4 12.12.2005 00:11:18
MySQL, Sortierung nach Feld in 2ter Tabelle bombel PHP für Fortgeschrittene und Experten 8 17.06.2003 19:26:45


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:17:59 Uhr.


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


© 2001-2025 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt