Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie - JOIN czy coś...
Rafiki23
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


Witam,

Mam pewien problem... gdyż nie wiem jak mam połączyć zapytania SQL w jedno (obecnie baza mi się strasznie krzaczy z powodu bardzo wielu zapytań) myślałem o JOINie, ale nie mam pomysłu jak go użyć, a jak już jest, to niestety nie idzie...

A więc tak. Mam dwie tabele.

- wyniki
MeczID | SezonID | LigaID | MeczData | GospodarzID | GoscID | BramkiGospodarz | BramkiGosc

- bramki
ID | MeczID | LigaID | SezonID | Pilkarz | DruzynaID | Minuta

Teraz robiłem to tak :
Pobierałem wyniki z jakiegoś zakresu dat w danej lidze, później jak wyświetlałem wierszami wyniki, to robiłem zapytanie WHERE MeczID = '$mecz' AND DruzynaID = '$data[GospodarzID]' i wyświetlałem strzelców goli gospodarzy.
To samo robiłem dla gosci. Czyli do jednego meczu robiłem dodatkowo 2 zapytania... :/ A jak meczów było np na stronie 10, to robiłem 20 zapytań + zapytanie o wyniki.

Dlatego mam pytanie o pomoc... jak to zapytanie skonstruować i czy jest taka możliwość, żeby zrobić to w jednym zapytaniu i dopiero jakoś to w skrypcie poukładać ?

Z góry dziękuję za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Rafiki23 8.09.2008, 22:53:02
Go to the top of the page
+Quote Post
Exek
post
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 10
Dołączył: 16.08.2007

Ostrzeżenie: (0%)
-----


trochę mało przejrzyście napisałeś, ale może najpierw zbierz jakie potrzebujesz ID meczów i gospodarzy (jakiś array w php) a potem osobne zapytanie które pobierze te rekordy naraz?

Ten post edytował Exek 8.09.2008, 22:55:04
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Niewiele ma to wspólnego z PHP. Przenoszę na Bazy danych.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze zrozumiałam co chcesz zrobić, więc odpowiadam trochę po omacku.

Zapytanie:

  1. SELECT *
  2. FROM wyniki w
  3. LEFT JOIN bramki b ON w.MeczID = b.MeczID
  4. WHERE (MeczData BETWEEN data_od AND data_do) AND LigaID=coś


w miejsce gwiazdki musisz wpisać pola z obu tabel które chcesz pobrać

W ten sposób możesz pobrać wszystkie bramki dla każdego meczy meczu a warunek WHERE ogranicza ci mecze do wybranego przedziału czasowego i ligi.

W ten sposób dla każdego meczy dostaniesz tyle rekordów ile było bramek. masz zdublowane info o meczach na przykład jeśli w miejsce * wpiszesz:
w.MeczID,w.MeczData,w.GospodarzID,w.GoscID,w.BramkiGospodarz, w.BramkiGosc, b.Pilkarz, b.DruzynaID,b.Minuta

Dostaniesz coś w tym stylu

15 2008-04-12 druzynaA druzynaB 0 3 Kowalski druzynaB 9:12
15 2008-04-12 druzynaA druzynaB 0 3 Kowalski druzynaB 20:05
15 2008-04-12 druzynaA druzynaB 0 3 Nowak druzynaB 52:23
27 2008-04-13 druzynaC druzynaD 1 1 Mazurek druzynaC 16:49
27 2008-04-13 druzynaC druzynaD 1 1 Bal druzynaD 49:17

i tak dalej

Przeczesując rekordy pętlą możesz sobie ładnie te dane zapakować w jakieś tablice i potem nimi zarządzać.

Jedna uwaga. Zupełnie niepotrzebnie (moim zdaniem) masz zdublowane w tabeli bramki takie pola jak LigaID | SezonID
Wystarczy pole MeczID, które jednoznacznie łączy dany rekord z rekordem w tabeli wyniki gdzie te dane już są. Poczytaj trochę o redundancji danych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował JoShiMa 9.09.2008, 09:53:31
Go to the top of the page
+Quote Post
Rafiki23
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


Dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzisiaj to przetestuje, coś podobnego spróbuję zrobić no i zobaczymy czy zadziała, jak nie to pokombinuje dalej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Kombinowałem no i nie idzie... :/ Pokazuje mi się nadal tyle meczów ile mam strzelców. Może ktos znajdzie rozwiązanie? Wydaje mi się że wszystko jest ok...

  1. $get_matches1 = mysql_query("SELECT w.MeczID as id,
  2. w.SezonID as SezonID,
  3. w.LigaID as LigaID,
  4. w.MeczData as data,
  5. w.MeczGodzina as godzina,
  6. w.KolejkaMecz as kolejka,
  7. (SELECT d.DruzynaPelnaNazwa from druzyna d WHERE d.DruzynaID = w.GospodarzID) AS hometeam,
  8. (SELECT d.DruzynaPelnaNazwa from druzyna d WHERE d.DruzynaID = w.GoscID) AS awayteam,
  9. w.GospodarzID as team_a_ID,
  10. w.GoscID as team_b_ID,
  11. w.BramkiGospodarz as goals_home,
  12. w.BramkiGosc as goals_away,
  13. w.MeczUwagi as uwagi,
  14. b.MeczID as SMeczID,
  15. b.Pilkarz as Pilkarz,
  16. b.DruzynaID as SDruzynaID
  17. FROM mecze_$LigaID w
  18. LEFT JOIN gole b ON w.MeczID = b.MeczID
  19. AND w.LigaID = b.LigaID
  20. WHERE (
  21. w.MeczData
  22. BETWEEN '$minus2dni'
  23. AND '$plus3dni'
  24. )
  25. AND w.LigaID = '$LigaID'
  26. AND w.SezonID = '$SezonID' ORDER by w.MeczData ASC, w.MeczGodzina ASC",$lacz) or die(mysql_error());
  27.  
  28.  
  29. if(mysql_num_rows($get_matches1) <= 1)
  30.        {
  31.            echo "<table>";
  32.        }
  33.        else
  34.        {
  35.                              echo"<div align=\"center\">";?>
  36.              <center>
  37.            <br><table border="0" cellspacing="1" width="95%">
  38.            <?
  39.  
  40.            $i = 0;
  41.            $temp = '';
  42.            $ja = 0;
  43.            $tempja = '';
  44.  
  45.  
  46.            while($data = mysql_fetch_array($get_matches1))
  47.            {
  48.                if($i == 0)
  49.                {
  50.  
  51.  
  52.                  ?>
  53.              <tr>
  54.                <td width="100%" colspan="5"> <b><font size="2"><?php echo"$data[data]";?> 
  55.                  -  Kolejka nr <?php echo"$data[kolejka]";?></font></b></td>
  56.              </tr>
  57. <?php
  58.                }
  59.  
  60.                if($data['data'] != "$temp" && $i > 0)
  61.                {
  62. ?>
  63.              <tr>
  64.                <td width="100%" colspan="5"> <b><font size="2"><?php echo"$data[data]";?> 
  65.                  -  Kolejka nr <?php echo"$data[kolejka]";?></font></b></td>
  66.              </tr>
  67. <?php
  68.                }
  69.  
  70.  
  71.                if($ja == 0)
  72.                {
  73.  
  74.  
  75. ?>
  76. <tr>
  77.                  <td width="10%" align="center"><?php echo"$data[godzina]";?></td>
  78.                  <td width="37%"><b> <?php echo"$data[hometeam]";?></b></td>
  79.                  <td width="3%" align="center">-</td>
  80.                  <td width="37%"><b> <?php echo"$data[awayteam]";?></b></td>
  81.                  <td width="13%">
  82. <?php
  83.                if(!is_null($data['goals_home']))
  84.                    echo"<p align=\"center\"><b>$data[goals_home]: $data[goals_away]</b>";
  85. ?>
  86.                </td></tr>
  87.  
  88. <?php
  89.  
  90.  
  91.            if($data['uwagi']==''){}
  92.            else {
  93.  
  94. ?>
  95.              <tr>
  96.                <td width="100%" align="center" colspan="5">
  97.                <p align="left"> <i><font size="1"><?php echo"$data[uwagi]"; ?></font></i></td>
  98.              </tr>
  99. <?php
  100.                }}
  101.  
  102.                if($data['id'] == "$tempja" && $ja > 0)
  103.                {
  104. ?>
  105. <tr>
  106.                  <td width="10%" align="center"><?php echo"$data[godzina]";?></td>
  107.                  <td width="37%"><b> <?php echo"$data[hometeam]";?></b></td>
  108.                  <td width="3%" align="center">-</td>
  109.                  <td width="37%"><b> <?php echo"$data[awayteam]";?></b></td>
  110.                  <td width="13%">
  111. <?php
  112.                if(!is_null($data['goals_home']))
  113.                    echo"<p align=\"center\"><b>$data[goals_home]: $data[goals_away]</b>";
  114. ?>
  115.                </td></tr>
  116. <?php
  117.  
  118.  
  119.  
  120.            if($data['uwagi']==''){}
  121.            else {
  122.  
  123. ?>
  124.              <tr>
  125.                <td width="100%" align="center" colspan="5">
  126.                <p align="left"> <i><font size="1"><?php echo"$data[uwagi]"; ?></font></i></td>
  127.              </tr>
  128. <?php
  129.               }
  130.                $tempja = "$data[id]";
  131.  
  132.                $ja++;
  133.  
  134.                }
  135.  
  136.                $temp = "$data[data]";
  137.  
  138.                $i++;
  139.            }
  140.        }
  141.  
  142.        mysql_free_result($get_matches1);


Ten post edytował Rafiki23 10.09.2008, 13:52:59
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(Rafiki23 @ 10.09.2008, 14:52:29 ) *
Kombinowałem no i nie idzie... :/ Pokazuje mi się nadal tyle meczów ile mam strzelców. Może ktos znajdzie rozwiązanie? Wydaje mi się że wszystko jest ok...


Przecież pokazałam Ci czarno na białym że tyle meczów Ci pokaże. Dopiero analizując w pętli te rekordy możesz obrobić te dane. rozdzielając info o meczach i o strzelcach.
Go to the top of the page
+Quote Post
Rafiki23
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


Cytat(JoShiMa @ 10.09.2008, 15:41:41 ) *
Przecież pokazałam Ci czarno na białym że tyle meczów Ci pokaże. Dopiero analizując w pętli te rekordy możesz obrobić te dane. rozdzielając info o meczach i o strzelcach.

A możesz pokazać jakiś przykład, bo ciężko mi to jest wyobrazić... Jakieś kroki jak to spóbować zrobić...
Go to the top of the page
+Quote Post
JoShiMa
post
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


A jaka strukturę danych chcesz uzyskać?
Go to the top of the page
+Quote Post
Rafiki23
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


wszystko jedno (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ważne żeby łatwo można było coś z tym zrobic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
JoShiMa
post
Post #10





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


No sorry, ale ja Ci nie będę pisac całego skryptu. Powiedz jaką chcesz dostać strukturę danych to Ci podpowiem.

Ten post edytował JoShiMa 10.09.2008, 15:23:20
Go to the top of the page
+Quote Post
Rafiki23
post
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


Ogólnie to poza tym co wyżej pokazałem co chcę uzyskać, pod danym meczem chcę wypisać strzelców, dlatego najlepiej aby struktura danych wyglądała podobnie. Osobno mecze i osobno strzelcy
Go to the top of the page
+Quote Post
JoShiMa
post
Post #12





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Przykładowy kod adekwatny do wcześniejszego mojego kodu. W każdym razie ja bym tak zrobiła:

  1. <?php
  2. $wynik_zapytania = mysql_query($zapytanie);
  3. while($rekord = mysql_fetch_assoc($wynik_zapytania)) {
  4.    $mecze[$rekord['MeczID']] = array('data'   =>   $rekord['MeczData'],
  5.                                                      'gospodarz'   =>   $rekord['GospodarzID'],
  6.                                                      'gosc'   =>  $rekord['GoscID'],
  7.                                                      'bramki_gosp'   =>  $rekord['BramkiGospodarz'],
  8.                                                      'bramki_gosc'   =>  $rekord['BramkiGosc']);
  9.   $mecze[$rekord['MeczID']] [bramki][$rekord['DruzynaID']][] = array('strzelec'   =>  $rekord['Pilkarz'],
  10.                                                                                                     'minuta'   =>   $rekord['Minuta']);
  11. }
  12.  
  13. print_r($mecze); //wyswietlenie struktury danych
  14. ?>
Go to the top of the page
+Quote Post
Rafiki23
post
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

Ostrzeżenie: (0%)
-----


super (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) dzięki za przykład (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Już prawie udało mi się osiągnąć to co chcę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 01:27