Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Poprawne zbudowanie zapytania
nikestylex7
post 9.05.2013, 15:36:39
Post #1





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Mam pewien problem, gdyż posiadam złożoną bazę danych czyli każda tabela łączy się z drugą za pomocą unikalnego id oraz id zdarzenia. Poniżej moje trzy tabele

  1. `kupony` (`id`, `zdarzenie`, `typ`, `uni_id`)
  2. `spotkania` (`id`, `zdarzenie`, `liga`, `dataczas`, `kurs1`, `kursx`, `kurs2`, `wynik`, `rozliczony`)
  3. `uni_kupony` (`id`, `data`, `stawka`, `id_user`, `rozliczony`, `wygrana`)


Chciałbym stworzyć zapytanie które sprawdzi mi czy wszystkie spotkania na kuponie są rozliczone oraz zliczy ich kurs i pomnoży ze stawką.

  1. $cos = mysql_fetch_assoc(mysql_query("SELECT * FROM kupony WHERE uni_id='id z uni_kupony np 45464657'"));

To zapytanie powinno mi pobrać wszystkie rekordy które mają uni_id o takim samym numerze co na uni_kupony

dajmy że przypisane były tylko 2 spotkania czyli dwa id o numerze np: 13 i 15

  1. $cos['zdarzenie'];
ta zmienna posiada id wszystkich spotkań które są na kuponie czyli 13 i 15

chciałbym zliczyć teraz ilość spotkań o podanym id czyli 13 i 15 które są rozliczone. Jeśli nie to wypisze nie jeśli tak to pomnoży ich kursy ze sobą oraz ze stawką i wypisze na ekranie.

Pomoże ktoś?




?

?

?

Ten post edytował nikestylex7 9.05.2013, 14:55:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
ddr
post 9.05.2013, 16:13:06
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 27.03.2010

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


Spróbuj tak.

  1. $cos = mysql_fetch_assoc(mysql_query("SELECT m.uni_id, n.id FROM kupony as m, uni_kupony as n WHERE m.uni_id='n.id'"));

Go to the top of the page
+Quote Post
nikestylex7
post 9.05.2013, 19:25:07
Post #3





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Niestety twoj pomysł nie działa lecz on w ogóle nie jest powiązany z tym z czym mam problem. Może ktoś inny ma jakiś pomysł na zapytanie ? i jakiegoś ifa?

nie wiem może wszystkie wyniki zmiennej coś puścić w while i w pętli napisać moje zapytanie które będzie pobierać wszystko ze spotkania o id którym będzie wynik coś. Ale to trochę bez sensu bo jak będę miał 12 wyników to zrobi mi 12 zapytań do bazy.

  1. $spot = "SELECT * FROM kupony WHERE uni_id='$idk'";
  2. $rekord = mysql_query($spot);
  3. while($cos = mysql_fetch_assoc($rekord)){
  4. $id_s = $cos['zdarzenie'];
  5. $cos2 = mysql_fetch_assoc(mysql_query("SELECT * FROM spotkania WHERE id='$id_s'"));
  6. }


Plusem jest to że każdy wynik to oddzielne spotlanie czyli wszystkie jego dane. teraz trzeba sprawdzić czy spotkania które są na kuponie są rozliczone pomnożyć kursy i już
Go to the top of the page
+Quote Post
bpskiba
post 9.05.2013, 19:47:12
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Zacznijmy od odpowiedzi na pytanie: czy takie pytanie jest poprawne?
  1. SELECT *
  2. FROM kupony k
  3. JOIN uni_kupony u ON k.uni_id=u.id
  4. JOIN spotkania s ON s.id=k.zdarzenie


Ostatnio mam problem z rozumieniem opisów problemów na tym forum i sam już nie wiem, kto głupieje.... headsetsmiley.png
Go to the top of the page
+Quote Post
nikestylex7
post 9.05.2013, 21:01:57
Post #5





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


aha i to pobiera mi wszystkie rekordy lecz ja bym chciał tylko te o wybranym id i potem sprawdzić czy są rozliczone w zależności ile ich jest na kuponie

?

?

Ten post edytował nikestylex7 9.05.2013, 20:00:00
Go to the top of the page
+Quote Post
bpskiba
post 9.05.2013, 21:59:03
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


więc dalej

  1. SELECT *
  2. FROM kupony k
  3. JOIN uni_kupony u ON k.uni_id=u.id
  4. JOIN spotkania s ON s.id=k.zdarzenie
  5. WHERE
  6. s.id=13


Go to the top of the page
+Quote Post
nikestylex7
post 10.05.2013, 14:58:19
Post #7





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Wytłumaczę jeszcze raz. Na dokładnie swojej bazie.

Poniżej tabela spotkania to tutaj admin dodaje spotkania mają one rekord rozliczony tzn czy admin go rozliczył czyli dodał wynik.


Dalej mamy kupony jeśli osoba stworzy kupon to spotkania ktore wybrał na kuponie trafią tutaj gdzie zdarzenie to id spotkania a typ to wynik jaki podał użytkownik.


Dalej mamy już tylko cały kupon. Czy jest rozliczony stawke jaką postawił użytkownik oraz unikalne id dzięki któremu rozpoznaje spotkania które do niego są przypisane w kuponie.


Teraz tak mój problem to sprawdzenie czy wszystkie spotkania na kuponie są rozliczone (aktualnie w bazie dodałem tylko 3 spotkania które są na kuponie, na potrzeby wytłumaczenia) trzeba w to wejść tak unikalne id kuponu -> kupony zdarzenie -> po zdarzeniu dojść jakie to spotkania i sprawdzić które są rozliczone jeśli jakieś spotkanie nie jest to wypisuje "Nie" jeśli wszystkie są to wypisuje "Tak" zlicza kursy tych spotkań w zależności jaki typ podał użytkownik w tabeli kupony i mnożymy ze stawką z uni_kupony. Wytłumaczyłem najprościej jak się dało i tak jak ja to rozumiem.
Go to the top of the page
+Quote Post
bpskiba
post 10.05.2013, 16:26:07
Post #8





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Aby to zrobić jedynie za pomocą mysql trzeba napisać funkcję składową.
Latwiej zadać dwa pytania, z których jedno sprawdzi stan rozliczeń, następnie php sprawdzi wynik i zada drugie pytanie

Pierwsze może być takie:

  1. SELECT *
  2. FROM kupony k
  3. JOIN uni_kupony u ON k.uni_id=u.id
  4. JOIN spotkania s ON s.id=k.zdarzenie
  5. WHERE
  6. s.rozliczony=0 AND
  7. k.id=1
Go to the top of the page
+Quote Post
nikestylex7
post 10.05.2013, 16:36:29
Post #9





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


trochę źle napisałeś

  1. FROM kupony k
  2. JOIN uni_kupony u ON k.uni_id=u.id
  3. JOIN spotkania s ON s.id=k.zdarzenie
  4. WHERE
  5. s.rozliczony=0 AND
  6. k.uni_id=unikalne id z uni_kupony np 1"));


No dobra to mi pobierze wszystko z kuponow jeśli jakieś spotkanie nie jest rozliczone, czy to zapytanie jest dobrze skonstruowane ?

a to mi sprawdzi czy jest jakiś wynik czy nie ma żadnego spotkania

  1. if($cos['rozliczony'] == 0){
  2. echo"Nie";
  3. }else{
  4. echo"Tak";
  5. }


Co dalej?

Ten post edytował nikestylex7 10.05.2013, 16:45:00
Go to the top of the page
+Quote Post
bpskiba
post 10.05.2013, 17:00:19
Post #10





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Myślę, że dobrze napisałem:
Sprawdzam, czy w kuponie o id=1 istnieją mecze o stausie=0 (czyli nie rozliczone). Jeśli wszystko jest rozliczone, to zapytanie zwróci zerową liczbę rekordów

Dalej już tak, jak kombinujesz, czyli:
jeżeli ilość rekordów z pierwszego pytania równa się zero to...... i piszemy drugie pytanie pobierające dane do pomnożenia. Dodam, że drugie pytanie będzie się różnić od pierwszego jedynie sekcją WHERE
Go to the top of the page
+Quote Post
nikestylex7
post 11.05.2013, 15:55:41
Post #11





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


tylko cholercia coś zapytanie oraz if nie działa poprawnie ponieważ mam jedno spotkanie rozliczone drugie nie lecz i tak pokazuje że kupon rozliczony

zrobiłem tak nie pomogło
  1. $cos = "SELECT *
  2. FROM kupony k
  3. JOIN uni_kupony u ON k.uni_id=u.id
  4. JOIN spotkania s ON s.id=k.zdarzenie
  5. WHERE
  6. s.rozliczony=0 AND
  7. k.id=$idd";
  8. $cos1 = mysql_query($cos);
  9. if(mysql_num_rows($cos1) == 0){
  10. echo"Tak";
  11. }else{
  12. echo"Nie";
  13. }


?

Pomoże ktoś?
Go to the top of the page
+Quote Post
potreb
post 11.05.2013, 16:15:17
Post #12





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


A pętla


--------------------

Go to the top of the page
+Quote Post
nikestylex7
post 11.05.2013, 21:34:26
Post #13





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


wszystko śmiga oprócz mnożenia elementów tablicy ponieważ nie wiem jak mam się za to wziąć może ktoś mnie nakieruje

  1. //rozliczanie
  2. $cos = "SELECT *
  3. FROM kupony k
  4. JOIN uni_kupony u ON k.uni_id=u.id
  5. JOIN spotkania s ON s.id=k.zdarzenie
  6. WHERE
  7. s.rozliczony=0 AND
  8. k.uni_id='$idd'";
  9. $cos1 = mysql_query($cos);
  10. $wiersze = mysql_num_rows($cos1);
  11. if ($wiersze == 0){
  12. echo"Tak";
  13. echo"</div>";
  14. $spot = "SELECT * FROM kupony WHERE uni_id='$idd'";
  15. $rekord = mysql_query($spot);
  16. $spotkanie = mysql_fetch_assoc($rekord);
  17. $ids=$spotkanie['zdarzenie'];
  18. $spot2 = "SELECT * FROM spotkania WHERE id='$ids'";
  19. $rekord2 = mysql_query($spot2);
  20. $sp = mysql_fetch_assoc($rekord2);
  21. while($spotkanie = mysql_fetch_assoc($rekord)){
  22. if($sp['wynik'] == $spotkanie['typ']){
  23. if($spotkanie['typ'] == 1){
  24. $tab[] = $spotkanie['kurs1'];
  25. }else if($spotkanie['typ'] = 0){
  26. $tab[] = $spotkanie['kursx'];
  27. }else{
  28. $tab[] = $spotkanie['kurs2'];
  29. }
  30. //
  31. //
  32. // tutaj powinienem zliczać tablice i wpisać wynik w div
  33. //
  34. //
  35. echo"<div style='float:left; width:70px;'><div style='color:green;'>wynik</div></div>";
  36. }else{
  37. echo"<div style='float:left; width:70px;'><div style='color:red;'>0</div></div>";
  38. break;
  39. }
  40. }
  41. }else{
  42. echo"Nie";
  43. echo"</div>";
  44. echo"<div style='float:left; width:70px;'>W trakcie...</div>";
  45. }
  46.  
  47. //koniec rozliczania


?
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:35