Sortowanie tabeli według różnicy

0

Witajcie. Jak można posortować tabele według różnicy dwóch rekordów chodzi mi że mamy np. pierwsze sortowanie według punktów no i drugi warunek przy równej ilości punktów który chce uzyskać, czyli różnica setów wygranych i setów przegranych

.....
$result = $conn->prepare("SELECT * FROM tabelatestowa ORDER BY pkt DESC");
....
<td><label><?php echo $row['club_name']; ?></label></td>
<td><label><?php echo $row['games']; ?></label></td>
<td><label><?php echo $row['pkt']; ?></label></td>
<td><label><?php echo $row['set_wyg'];?> : <?php echo $row['set_prze'];?></label></td>
.....
1
ORDER BY
  foo ASC,
  (bar - foo) DESC
0

Dzięki Wielkie :) Mam jeszcze jedną prośbę jak teraz powinna wyglądać druga baza by móc zacząć robić jakikolwiek update.

czyli pierwsza aktualna baza:
id_club
name_club
game
points
set_win
set_lost

druga baza (mecze)
id_game (czyli wszystkie mecze przy 3 drużynach 6 meczy)
score_home
score_away

Mógłby ktoś pomóc to złożyć by to miało ręce i nogi ?

0

Niestety Twój opis jest dosyć enigmatyczny - mógłbyś spróbować opisać to w inny sposób?

0

Chodzi mi o robienie update bazy po każdej kolejce. tak by dopisując wynik tabelka sama się podliczała. Dlatego najpierw próbuję sklecić do porządku strukturę bazy danych czyli drugą tabelkę (o ile idę dobrym torem) nazwijmy ją np terminarz i tu zaczynają się schody.

Wiem że każdy mecz musi mieć osobne id co do tego tylko jestem pewien. potrzebuję wyświetlić dwa kluby oraz wynik i tu nie wiem jak to dokładnie poskładać z wyróżnieniem na gospodarza i gościa by szło na dalszym etapie sortować według meczy bezpośrednich(w tym bramki na wyjeździe) Przede wszystkim chce złożyć o takie wytyczne strukturę bazy by już w niej nie dłubać a zająć się PHP. Jakby ktoś mógł pomóc poskładać właśnie samą strukturę.

0
  1. W osobnej tabeli przechowujesz dane dot. druzyny (id, nazwa, [...])
  2. W osobnej date dot. mecze (id, id gospodarza, id goscia, gole gospodarzy, gole gosci, [...])
  3. W osobnej ligowa tabele (id, id druzyny, mecze, gole zdobyte, gole stracone, pkt, [...])

Automat liczący punkty, sumujący gole to już PHP.
Po dodaniu rekordu o konkretnym spotkaniu automat (pobór danych z bazy dot. drużyn biorących udział w spotkaniu -> obliczenia pkt, goli, itd -> zapis do bazy).

0

W podobny sposób myślałem ale męczy mnie tabela "mecze". Z nią mam największy problem. Czy nie powinienem tam dodać id drużyny? , bo jak będzie wiadomo kto z kim gra? Wydaje mi się że potrzebuje też 4 tabeli

Drużyna (id drużyny, nazwa)
Mecze (id meczu,id drużyny?, id gospodarza, id gościa, gole gospodarzy, gole gości)
Tabela Ligowa (id, id drużyny, mecze, gole zdobyte, gole stracone, pkt,)
Dom Wyjazd (id, id gospodarz, id gość)

Oczywiście można pododawać ilość zwycięstw, daty meczów itd, na teraz to jest zbędne.

Może ma ktoś jakiś link, prosty przykład działania takiego automatu. Szukałem w necie ale znalazłem tak rozbudowane że nie na moją głowę a chodzi mi o coś prostego o zbliżonej strukturze bazy chociaż by jedna dwie rzeczy się zliczała by mieć tylko wyobrażenie o tym

0
caramba napisał(a):

Mecze (id meczu,id drużyny?, id gospodarza, id gościa, gole gospodarzy, gole gości)

Przecież masz podane drużyny w id gospodarza i id gościa.. Po co trzeci raz podawać? I kogo chcesz tam wpisać? W meczu udział biorą dwie drużyny.

caramba napisał(a):

Dom Wyjazd (id, id gospodarz, id gość)

A to po co? Przecież już masz to w tabeli Mecze.

caramba napisał(a):

Może ma ktoś jakiś link, prosty przykład działania takiego automatu. Szukałem w necie ale znalazłem tak rozbudowane że nie na moją głowę a chodzi mi o coś prostego o zbliżonej strukturze bazy chociaż by jedna dwie rzeczy się zliczała by mieć tylko wyobrażenie o tym

Ciężko będzie Ci coś takiego idealnego znaleźć. Kombinuj samemu, to najlepszy sposób. Ściągając gotowce niewiele się nauczysz i jeszcze mniej zrozumiesz.

0

Zaczynam powoli kumać układać to w głowie php. Najgorszy problem mam mysql. Rozdzieliłem tabele na razie na dwie, idę małymi kroczkami te zapytania to....uff.
Tabele zrobiłem jak radziłeś czyli mamy

club (id_club, name_club)
table (id_table, id_club, games, points, set_win, set_lost)

no właśnie jak teraz wczytać do tabeli name_club. W bazie tabela podałem id_club i ręcznie przypisałem wartość. Jak teraz wyświetlić odpowiadającą id nazwę klubu. w tym momencie jej nie widzi a oto kod:

<?php
           require_once('conect.php');
           $result = $conn->prepare("SELECT * FROM tabela ORDER BY points DESC, (set_win - set_lost) DESC");
           $result->execute();
           $results = $result->fetchAll();
           foreach ($results as $index => $row) {
       ?>			
		<tr>
			  <td><label><?php echo ($index + 1);?>  </label></td>
			  <td><label><?php echo $row['club_name']; ?></label></td>
		      <td><label><?php echo $row['games']; ?></label></td>
		      <td><label><?php echo $row['points']; ?></label></td>
			  <td><label><?php echo $row['set_win'];?> : <?php echo $row['set_lost'];?></label></td>
0

Poczytaj o łączeniu tabel w zapytaniach SQL
Np. https://www.w3schools.com/sql/sql_join.asp

0

Wpisałem coś takiego poniżej ale jeszcze czegoś mi brakuje błędu nie pokazuję ale też nie wyświetla tabeli.

$result = $conn->prepare("SELECT * FROM tabela INNER JOIN clubs ON tabela.id_club = clubs.club_name ORDER BY points DESC, (br_strz - br_str) DESC");
            $result->execute();
            $results = $result->fetchAll();
            foreach ($results as $index => $row)

Również próbowałem dopisać MyAdmin w zakładce SQL :

SELECT * FROM `tabela` INNER JOIN `clubs` ON `tabela`.id_club = `clubs`.club_name 

Kliknąłem "Wykonaj", pokazuje że dobrze ale nic się nie dzieje, bez tych apostrofów też próbowałem

0

Bo łączyć trzeba tożsame kolumny

`tabela`.id_club = `clubs`.id_club

Ponadto w zapytaniu wskazuj które kolumny Cię interesują. Wstawianie na pałę wszędzie * skutkować będzie błędem niejednoznaczności.

0

Wielkie dziękuję :)

0

Mógłbym mieć jeszcze pytanie? Chodzi mi o trzecia tabelkę którą wskazałeś a mianowicie:

id, id gospodarza, id goscia, gole gospodarza, gole goscia

dobrze rozumuję że w bazie w id_gospodarza mama podać id_clubu który jest gospodarzem i podobnie w id_gościa ?
no powiązać jak wyżej tego nie mogę, jeśli tak to idę się zastanawiać jak to w kodzie zapisać. Lecz jak byś miał rady to bardzo poproszę, chociaż już bardzo wiele pomogłeś za co bardzo dziękuję.

0
caramba napisał(a):

Mógłbym mieć jeszcze pytanie? Chodzi mi o trzecia tabelkę którą wskazałeś a mianowicie:

id, id gospodarza, id goscia, gole gospodarza, gole goscia

dobrze rozumuję że w bazie w id_gospodarza mama podać id_clubu który jest gospodarzem i podobnie w id_gościa ?
no powiązać jak wyżej tego nie mogę, jeśli tak to idę się zastanawiać jak to w kodzie zapisać. Lecz jak byś miał rady to bardzo poproszę, chociaż już bardzo wiele pomogłeś za co bardzo dziękuję.

Jedną tabelę możesz wielokrotnie podpiąć pod zapytanie, więc kod winien wyglądać mniej więcej tak:

SELECT hc.nazwa AS homeNazwa, gc.nazwa AS guestNazwa, m.homeGoals, m.guestGoals
FROM matches AS m
JOIN clubs AS hc ON hc.clubID = m.homeID
JOIN clubs AS gc ON gc.clubID = m.guestID

W efekcie czego powinieneś otrzymać tabele z wszystkimi meczami z tabeli gdzie odpowiednio w kolumnach znajdą się

  1. nazwa gospodarza
  2. nazwa gościa
  3. strzelone gole przez gospodarza
  4. strzelone gole przez goscia

gdzie,
w tabeli meczowej homeID określa ID gospodarza i analogicznie guestID określa ID gościa i klucze te są tożsame z clubID z tabeli clubs.

0

Małymi kroczkami do celu Ale Twoja pomoc jest Wielka za co dziękuję. Powiedz mi tylko jak nazwę klubu tu wyświetlić zamiast home.id i quest.id, bo samo name_club nie wystarczy z pewnością. Po SELECT dałem * gdyż tego hc.nazwa AS homeNazwa, gc.nazwa AS guestNazwa nie potrafiłem rozkminić

Tabele:
clubs (id_club, name_club)
matches (matches_id, home_id, quest_id, home_goals, quest_goals)
league (league_id, id_club, games, points. set_win, set_lost)

<?php

$result = $conn->prepare("SELECT * FROM matches AS m  
                 JOIN clubs AS hc ON hc.club_id = m.home_id
                 JOIN clubs AS gc ON gc.club_id = m.guest_id
	        ORDER BY match_id ASC  ");

		$result->execute();
		for($i=0; $row = $result->fetch(); $i++){
?>
		<tr>
			<td><label><?php echo $row['match_id']; ?></label></td>
			<td><label><?php echo $row['home_id']; ?></label></td>
			<td><label><?php echo $row['guest_id']; ?></label></td>
		    <td><label><?php echo $row['home_goals']; ?> : <?php echo $row['quest_goals']; ?></label></td>
		</tr>
<?php } ?>

Ostatnie pytanie, teraz zrobiłem to w osobnym całkiem SELECT gdyż wyświetlam osobną tabelkę ale czy nie muszę tego złożyć w jedno ten kod z tabeli i ten teraz z meczy?

0
  1. Poczytaj o aliasach nazwa tabel i kolumn. Wtedy rozkminisz sql hc.nazwa AS homeNazwa, gc.nazwa AS guestNazwa
  2. W jednym miejscu piszesz matches_id w innym już $row['match_id']
  3. Wklej swoje zapytanie do PhpMyAdmin i zobacz jaki dostaniesz rezultat. A potem pomyśl co z tego tak naprawdę potrzebujesz i zastanów się skąd program ma wiedzieć o którą kolumnę Ci chodzi kiedy wpiszesz $row['name_club']
  4. Ad ostatnie pytanie. Po co sklejać wszystko w jeden kod? Piszesz zapytanie do tego co akurat potrzebujesz. Nie mniej, nie więcej.
  5. Odpowiedzi na wszystkie te pytania znajdziesz w niemal każdym tutorialu PHP+MySQL. Warto poświęcić chwilę by zrozumieć. Czekanie na gotowce to nie jest dobry sposób na naukę.
0

Dziękuję naprawdę za pomoc bo jest nie oceniona. Aliasy rozumiem skracamy sobie nazwę by było wygodniej pisać w dalszej części kodu, tylko wolę mieć przejrzystość kodu by zatrybić. Wszystko działa wyświetla poprawny clubID i tu to rozumiem dlaczego ale za pierona nie umiem się przebić by zamiast clubID wyświetlić clubName .Kombinuje na mój zdrowy rozum, wiem muszę wskazać że clubName to gospodarz lub gość

<td><label><?php echo $row['hc.clubName']; ?></label></td>
0

rozwiązane już :)

Proszę podpowiedz mi bo chciałem kolejki spotkań jeszcze dodać, tylko pytam o budowę bazy.
Ja to widzę tak:

matches (matchID kolejkaID homeID guestID homeGoal guestGoal )

Myślałem by dodać tabelke kolejki a w niej kolejkiID oraz ParyID ale myślę że nie potrzebnie bym skomplikował sprawę

Co o tym tylko sądzisz?

0

Cały czas sądziłem że w select dodajemy zainteresowane kolumny a nie że możemy to tak to po podstawiać mimo iż rozumiem raczej próbuję zrozumieć to ten myk nie jest prosty. Wyszło to tak:

<?php
$result = $conn->prepare(
                          "SELECT 
                           m.matchID, hc.clubName as homeClub, gc.clubName as guestClub,  m.guestGoals
                           FROM matches AS m
                           JOIN clubs AS hc ON hc.clubID = m.homeID
                           JOIN clubs AS gc ON gc.clubID = m.guestID ORDER BY matchID ASC");

$result->execute();
$results = $result->fetchAll();

foreach ($results as $index => $row){
?>
        <tr>
            <td><label><?php echo $row['matchID']; ?></label></td>
            <td><label><?php echo $row['homeClub']; ?></label></td>
            <td><label><?php echo $row['guestClub']; ?></label></td>
            <td><label><?php echo $row['homeGoals']; ?> : <?php echo $row['guestGoals']; ?></label></td>
        </tr>
<?php } ?> 

Co myślisz o dodaniu kolejek, samo dodanie ich do meczy wystarczy? pary z danej kolejki miały by to samo ID,
Wybacz jesteś jedyną osobą która ogarnia temat, nie mam kogo zapytać i męczyć

1 użytkowników online, w tym zalogowanych: 0, gości: 1