Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php + mysql >>> pobrac i posortowac rekordy
Forum PHP.pl > Forum > Bazy danych > MySQL
arti1
po temacie mozna pomyslec, ze to niby jest banalne - ale nie wyglada wszystko tak kolorowo:

mam 2 tabele w bazie:

DRUŻYNY z polami: id_druzyny, nazwa, logo
TERMINARZ z polami: id_meczu, nr_kolejki, id_druzyny1, id_druzyny2, gole1, gole2

ZAMIAR MAM TAKI:
stworzyć (oprócz terminarza) u siebie na stronce tabelke z wynikami zawierającą następujące pola: poz., drużyna, mecze, punkty, zw-rem-por, bramki

Chciałbym, aby była ona generowana na podstawie danych z tych dwóch tabel z bazy.
Wiadomo, że np. jesli gole 1 > gole 2 to druzyna1 (rozpoznawana po id) wygrala z druzyna2 i ma 3 punkty (remis 1pkt). To bedzie zliczanie ile dane druzyna ma zwyciestw, remisow i porazek.
Mecze - mysle ze mozna zliczac rekordy dla kazdej druzyny gdzie pole gole nie jest puste.
Punkty - wyliczane na podstawie ilosci wygranych, remisów i przegranych.
Bramki - sumowanie pol z golami.

Tylko jak te warunki zawrzec w zapytaniu do tych dwóch tabel, ktore mam w bazie?
Co wiecej tabela musi bbyc posortowana - u góry druzyna która ma najwiecej punktów, jesli maja tyle samo pktow to ta ktora strzelila wiecej bramek - jesli strzelily tyle samo to ta, ktora wpuscila mniej bramek.

No i to byłoby na tyle...
.... czy są jacyś wymiatacze kodu skłonni pomóc... :?:

Zrzut tabel:
[php:1:cd6f09c3bc]<?php
CREATE TABLE `druzyny` (
`id_druzyny` int(2) NOT NULL auto_increment,
`nazwa` varchar(30) NOT NULL default '',
`logo` varchar(30) NOT NULL default '',
PRIMARY KEY (`id_druzyny`)
) TYPE=MyISAM COMMENT='druzyny' AUTO_INCREMENT=20 ;

INSERT INTO `druzyny` VALUES (1, 'druzyna1', 'logo1.jpg');
INSERT INTO `druzyny` VALUES (2, 'druzyna2', 'logo2.jpg');
INSERT INTO `druzyny` VALUES (5, 'druzyna3', 'logo3.gif');
INSERT INTO `druzyny` VALUES (11, 'druzyna4', 'logo4.jpg');



CREATE TABLE `terminarz` (
`id_meczu` int(3) NOT NULL auto_increment,
`nr_kolejki` int(3) NOT NULL default '0',
`id_druzyny1` int(3) default '0',
`id_druzyny2` int(3) default '0',
`gole1` char(2) default '-',
`gole2` char(2) default '-',
PRIMARY KEY (`id_meczu`)
) TYPE=MyISAM COMMENT='tabela z terminarzem' AUTO_INCREMENT=20 ;

INSERT INTO `terminarz` VALUES (14, 1, 5, 11, '3', '4');
INSERT INTO `terminarz` VALUES (19, 1, 2, 1, '1', '2');
INSERT INTO `terminarz` VALUES (21, 2, 11, 1, '3', '2');
INSERT INTO `terminarz` VALUES (22, 3, 2, 5, '0', '0');
INSERT INTO `terminarz` VALUES (23, 2, 2, 5, '2', '2');
INSERT INTO `terminarz` VALUES (25, 1, 1, 5, '1', '2');
?>[/php:1:cd6f09c3bc]
BzikOS
php => Bazy danych
spenalzo
Cytat
Wiadomo, że np. jesli gole 1 > gole 2 to druzyna1 (rozpoznawana po id) wygrala z druzyna2 i ma 3 punkty (remis 1pkt). To bedzie zliczanie ile dane druzyna ma zwyciestw, remisow i porazek.

[sql:1:3718552da8]SELECT d1.nazwa AS druzyna1, d2.nazwa AS druzyna2, CASE WHEN t.gole1>t.gole2 THEN d1.nazwa WHEN t.gole1<t.gole2 THEN d2.nazwa WHEN t.gole1=t.gole2 THEN 'remis' END AS wygrana FROM druzyny d1, druzyny d2, terminarz t[/sql:1:3718552da8]
W polu druzyna1 i druzyna2 wiadomo co będzie, a w polu 'wygrana' powinna być nazwa zespołu, który wygrał lub tekst "remis" jezeli był remis.
Sądze ze to powinno dziaąc, ale nie wiem jak z tą cześcią gdzie jest CASE smile.gif
Cytat
Mecze - mysle ze mozna zliczac rekordy dla kazdej druzyny gdzie pole gole nie jest puste.

Tutaj nie mam pewnosci, ale spróbuj to:
[sql:1:3718552da8]SELECT count(*) FROM druzyna d, terminarz t WHERE t.gole1>0 AND t.gole2>0 AND (t.id_druzyny1=d.id_druzyny OR t.id_druzyny2=d.id_druzyny) GROUP BY d.nazwa[/sql:1:3718552da8]
Nie wiem czy to jest dobrze, ale spróbuj - jakby nie działało, to powiedz, co zwraca funkcja [manual:3718552da8]mysql_error[/manual:3718552da8].

Cytat
Bramki - sumowanie pol z golami.

Nie wiem czy chodzi o sumowanie wszystkich bramek czy dla danej druzyny
a) su,a wszystkich goli
[sql:1:3718552da8]SELECT SUM(gole1) AS suma1, SUM(gole2) AS suma2 FROM terminarz[/sql:1:3718552da8]
a) wszystkie druzyny wraz z suma goli
[sql:1:3718552da8]SELECT SUM(t.gole1) AS suma1, SUM(t.gole2) AS suma2, d.nazwa AS nazwa FROM terminarz t, druzyny d WHERE t.id_druzyny1=d.id_druzyny OR t.id_druzyny2=d.id_druzyny[/sql:1:3718552da8]
Sądze że jednak coś jest tutaj pomieszane, ale powinno Cie naprowadzić.

Sam się nadal uczę, więc pewnie coś bedzie źle, ale licze że ktoś poprawi winksmiley.jpg ewentualne błedy.
arti1
spenalzo >> dzieki bardzo
Przyznam szczerze, że zapytania (jak dla mnie) są dosyc skomplikowane i bede musial na spokojnie do tego usiasc... niestety dopiero w weekend bo w piatek mam koło na uczelni sad.gif
Więc spróbuje się w tym połapac, a w razie czego dam znać.
PZDR i dzieki bardzo za podpowiedz.

Cytat
Nie wiem czy chodzi o sumowanie wszystkich bramek czy dla danej druzyny

Chodziło o to, że przy każdej drużynie ma być napisane ile goli strzelila, a po mysliku ile wpusciła (np. 22-14).
arti1
ok, poki co poradzilem sobie za pomoca tablic
a nad tymi zapytaniami do MySQLa musze jeszcze troche posiedziec aby wykumac jak to zrobic...
pzdr 4 u all biggrin.gif no i merry christmas tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.