Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Poprawne zbudowanie zapytania
Forum PHP.pl > Forum > Przedszkole
nikestylex7
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ś?




?

?

?
ddr
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'"));

nikestylex7
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ż
bpskiba
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
nikestylex7
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

?

?
bpskiba
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


nikestylex7
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.
bpskiba
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
nikestylex7
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?
bpskiba
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
nikestylex7
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ś?
potreb
A pętla
nikestylex7
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


?
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.