Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Łączenie zapytań i pętla while
sorex
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


Witam.

Mam dwie różne tabele:

cena
-----------------------
id | wartosc |
-----------------------
1 | cena 1 |
2 | cena 2 |
3 | cena 3 |
4 | cena 4 |

terminy
--------------------------------------
|id | rok | nazwa | ilosc_miejsc |
--------------------------------------
| 1 | 2013| term1 | 2 |
| 2 | 2013 | term2| 1 |
| 3 | 2013 | term3 | 4 |
| 4 | 2013 | term4 | 4 |





Chciałbym wyświetlić na stronie wszystkie terminy z tabeli "terminy" (np. pętlą while) ale dodatkowo, żeby przy każdym wyświetlonym terminie była jeszcze podana cena np.

--------------------------------------------
Termin: term1
---------------------------------------------
Ilość Wolnych miejsc: 2
---------------------------------------------
Cena: cena 2
---------------------------------------------

Mam taki kod:

  1. mysql_connect("*********", "**********", "***********") or die(mysql_error());
  2. mysql_select_db("***************") or die(mysql_error());
  3. $data = mysql_query("SELECT * FROM terminy JOIN cena WHERE (terminy.rok = '2013') ORDER BY terminy.id")
  4. or die(mysql_error());
  5.  
  6.  
  7. while($dane=mysql_fetch_array($data))
  8. {
  9.  
  10. ?>
  11.  
  12. <table bgcolor="#2E2B2B" border=1 cellpadding=4 width=580>
  13. <tr>
  14. <th width=60><font color="#F00000" size="2px">Termin:</font></th> <td width=270 align="left"><font color="#FFD200" size="2px"><b> <?php echo $dane['nazwa']; ?></b></font></td>
  15. <td><font color="#F00000" size="2px">Ilość wolnych miejsc:</font><font color="#FFD200" size="3px"><b><?php echo $dane['ilosc_miejsc']; ?></b> Cena: <?php echo $dane['wartosc']; ?>
  16. </tr>
  17.  
  18.  
  19. </table>


Wiem, że w zapytaniu SQL jest błąd bo wyświetla mi ilość wierszy z tabeli "terminy" razy ilość wierszy z tabeli "cena".
Czy ktoś mógłby mnie naprowadzić na właściwy tor?

Ten post edytował sorex 26.06.2012, 13:21:24
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No a po jakim niby polu łączą się te obie tabele?
Go to the top of the page
+Quote Post
sorex
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


No właśnie sęk w tym że nie wiem jak je połączyć.

Czy da radę id.cena = ilosc_miejsc.terminy ?
Ilość terminów będzie stała. Ilość Cen również.

Ten post edytował sorex 26.06.2012, 13:38:44
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja się ciebie najpierw pytam po jakim polu tu cchiałbys je łączyc...... nie rozumiesz prostego pytania? No w jakiś logiczny sposób rekord z tabeli pierwszej jest powiazany z rekordem z tabeli drugiej. I o to logiczne powiązanie się ciebie pytam, bo póki co tego nie widac

Cytat
Czy da radę id.cena = ilosc_miejsc.terminy ?
Ty tak na poważnie? A co ma cena do terminu?

Cytat
Ilość terminów będzie stała. Ilość Cen również.
Czyli co? Pole ID z pierwszej tabeli będzie odpowiadać polu ID z drugiej tabeli? No to łącz po ID
Go to the top of the page
+Quote Post
sorex
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


Nie mogę łączyć po ID ponieważ ilośc wolnych miejsc jest zmienna.
Zrobiłem takie zapytanie, jednak w dalszym ciągu nie działa jak powinno.
  1. "SELECT * FROM terminy LEFT JOIN ilosc_osob ON ilosc_osob.id=terminy.ilosc_miejsc ORDER BY terminy.id"


Ten post edytował sorex 26.06.2012, 13:47:37
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




....
A co ma ID z jednej tabeli do ilosci miejsc z drugiej tabeli?? No pomyśl trochę co ty wypisujesz :/

Jeśli w twojej logice, ID z obu tabel łączą się ze sobą, to i masz to w zapytaniu zrobić
..... ON ilosc_osob.id=terminy.id......
i już.
ALe to przy założeniu, że ID odpowiadają sobie nawzajem. Na dobrą sprawę ze wszystkich pól co tu masz to tylko to może być łączone po ID.
Go to the top of the page
+Quote Post
sorex
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


Wydaje mi się, że mogę połączyć ID z Ilością osób.

W tabeli ceny jest id (od 1 -14)
W tabeli Terminy jest (1 -14 ilość osób )
To się nie zmieni (w obu tabelach nie zmieni się ilość wierszy). Zmieniać się będzie tylko ilośc_miejsc.

Czy w dalszym ciągu źle myślę? Bo chyba musze się wrócić do Przedszkola :/

Ten post edytował sorex 26.06.2012, 14:01:57
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No jesli liczba osób jest odpowiednikiem ID z tabeli ceny.... to tak, możesz tak łączyć. Aczkolwiek nazewnictwo tych kolumn wskazuje że tak być nie może.

Kurcze, chlopie, sprawa jest banalnie prosta: to ty tworzyłes te tabele?

Jeśli tak, to nie wiesz po co to tworzyles i z czym masz to łączyc?
Jeśli nie ty to tworzyłeś to faktycznie idzie tylko zgadywać co jest czym.
Go to the top of the page
+Quote Post
sorex
post
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


No poplątałem się chyba we wszystkim ale już jestem na prostej.
Zrobiłem to w ten sposób (nie wiem czy może tak zostać):
  1. <?php
  2. // Connects to your Database
  3. mysql_connect("88888", "888888888", "888888") or die(mysql_error());
  4. mysql_select_db("8888888888888") or die(mysql_error());
  5. $data = mysql_query("SELECT * FROM terminy LEFT JOIN ilosc_osob ON ilosc_osob.id=terminy.id ORDER BY terminy.id")
  6.  
  7.  
  8. while($dane=mysql_fetch_array($data))
  9. {
  10.  
  11.  
  12. ?>
  13.  
  14. <table bgcolor="#2E2B2B" border=0 cellpadding=4 width=580>
  15. <tr>
  16. <th width=60><font color="#F00000" size="2px">Termin:</font></th> <td width=270 align="left"><font color="#FFD200" size="2px"><b> <?php echo $dane['nazwaPL']; ?></b></font></td>
  17. <td><font color="#F00000" size="2px">Iloć wolnych miejsc:</font><font color="#FFD200" size="3px"><b><?php echo $dane['ilosc_miejsc_wolnych']; ?></b>
  18. </tr>
  19.  
  20. <tr>
  21. <td colspan=2></font>
  22.  
  23. <form action=podsumowanie.php method=GET>
  24. <?php
  25.  
  26. $liczba = $dane['ilosc_miejsc_wolnych'];
  27. mysql_connect("888888888", "8888888888", "888888888") or die(mysql_error());
  28. mysql_select_db("8888888888") or die(mysql_error());
  29.  
  30. $zapytanie = mysql_query("SELECT * FROM ilosc_osob WHERE id<=$liczba");
  31.  
  32. echo 'Iloć osób: <select name="osoby" style="background-color:black; color:white;">';
  33. while($option = mysql_fetch_assoc($zapytanie)) {
  34. echo '<option value="'.$option['id'].'">'.$option['CenaPL'].'</option>';
  35. }
  36. echo '</select>';
  37. ?>
  38.  
  39. </td>
  40. <td>
  41. <center><input type=hidden name=nazwarezerw value="<?php echo $dane['nazwaPL']; ?>"><input type=hidden name=numerrezerw value="<?php echo $dane['numer_terminu']; ?>"><input type=submit value=Rezerwuj<?php if($dane['ilosc_miejsc_wolnych'] == 0): ?> disabled="disabled"<?php endif; ?>></form></center></td>
  42.  
  43. </td>
  44. </tr>
  45. </table>
  46.  
  47. <?
  48. }
  49. ?>


Ten skrypt generuje mi cos takiego:

(IMG:http://img837.imageshack.us/img837/9910/tesths.jpg)

wyświetla ilość pól w liście rozwijalnej w zależności od ilości wolnych miejsc, jesli miejsc jest zero, przycisk Rezerwuj jest wyłączony

Ten post edytował sorex 26.06.2012, 14:35:51
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
nie wiem czy może tak zostać
Widze ze teraz łączysz po ID. Poraz kolejny więc powtarzam: jeśli logiczne łączenie obu tabel ma się odbywać właśnie przez pola ID to, tak, może tak zostać. Tu naprawdę nie ma żadnej filozofii.

Jeśli to ty robiłeś te tabele, to w ogóle nie wiem po co w ogóle tworzyłeś tabele z ceną. Nie lepiej było poprostu dodać ją jako kolejna kolumna w tabeli terminy?
Go to the top of the page
+Quote Post
sorex
post
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.08.2010

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


Cytat(nospor @ 26.06.2012, 15:38:04 ) *
Jeśli to ty robiłeś te tabele, to w ogóle nie wiem po co w ogóle tworzyłeś tabele z ceną. Nie lepiej było poprostu dodać ją jako kolejna kolumna w tabeli terminy?


Masz rację. Sam sobie zagmatwałem wszystko (IMG:style_emoticons/default/smile.gif)

No ale już działa więc dziękuję bardzo za pomoc.


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: 22.08.2025 - 19:04