Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]{MySQL] - 2 tabele - jak wyświetlić wiele danych z jednego ID
Forum PHP.pl > Forum > Przedszkole
walldeck
Witam.

Mam dwie tabele:
klient + przykładowe dane:

  1. CREATE TABLE `klient` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `company` varchar(255) DEFAULT NULL,
  4. `city` varchar(100) DEFAULT NULL,
  5. `country` varchar(100) DEFAULT NULL,
  6. `postcode` smallint(20) DEFAULT '0',
  7. `street_name` varchar(100) DEFAULT NULL,
  8. `street_number` smallint(30) DEFAULT '0',
  9. PRIMARY KEY (`id`),
  10. KEY `company` (`company`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  12.  
  13. --
  14. -- Zrzut danych tabeli `klient`
  15. --
  16.  
  17. INSERT INTO `klient` VALUES (1, 'Mediahuset', 'Vejle', 'Denmark', 9560, 'Mariagervej', 2);
  18. INSERT INTO `klient` VALUES (2, 'Nordsign', 'Hadsund', 'Denmark', 9560, 'Mariagervej', 5);
  19. INSERT INTO `klient` VALUES (3, 'abcvd', 'Arhus', 'DK', 8260, 'Albertslund', 21);
  20. INSERT INTO `klient` VALUES (4, 'KK', 'DK', 'DK', 32767, 'aaa', 21);
  21. INSERT INTO `klient` VALUES (5, 'aa', 'DK', 'DK', 32767, 'aaa', 21);


Tabela orderstatus + przykładowe dane
  1. CREATE TABLE `orderstatus` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `confirm` datetime DEFAULT '0000-00-00 00:00:00',
  4. `ordernr` int(11) DEFAULT NULL,
  5. `pieces` int(11) DEFAULT NULL,
  6. `width` float DEFAULT NULL,
  7. `height` float DEFAULT NULL,
  8. `quantity` float DEFAULT NULL,
  9. `sendby` varchar(255) DEFAULT NULL,
  10. `technology` varchar(100) DEFAULT NULL,
  11. `dispatch` datetime DEFAULT '0000-00-00 00:00:00',
  12. `comment` varchar(255) DEFAULT NULL,
  13. `company` varchar(255) DEFAULT NULL,
  14. PRIMARY KEY (`id`),
  15. KEY `company` (`company`)
  16. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
  17.  
  18. --
  19. -- Zrzut danych tabeli `orderstatus`
  20. --
  21.  
  22. INSERT INTO `orderstatus` VALUES (2, '2009-07-23 00:00:00', 4666, 120, 200, 400, NULL, 'UPS', 'jv33', '2009-08-05 00:00:00', 'Nie wiem co z tym', NULL);
  23. INSERT INTO `orderstatus` VALUES (3, '2009-08-03 00:00:00', 4989, 120, 100, 150, NULL, 'n-car', 'jv3', '2009-08-30 00:00:00', 'So far so good', NULL);
  24. INSERT INTO `orderstatus` VALUES (6, '2009-11-11 00:00:00', 777, 33, 100, 100, NULL, 'ups', 'jv22', '2009-12-12 00:00:00', 'abecedefgha', 'Nordsign');


Z tabeli orderstatus wyrzucam wszytko na ekran, do wysyłania danych słuzy mi formularz który odwołuje swie do tabeli KLIENT poprzez SELECT i stamta wyciąga jeden rekord COMPANY i ta całość wyrzucana jest na ekran.

istotny fragment kodu formularza:
  1. ........
  2. <tr>
  3. <td bgcolor="#FFFFFF">
  4.       Comment :
  5.   </td>
  6.   <td>  
  7.   <input type = "text" name = "comment" maxlength="20" size = "10"><br />
  8.  </td>
  9.   </tr>
  10. <tr>
  11. <td bgcolor="#FFFFFF" width="30%">Client</td>
  12. <td bgcolor="#FFFFFF">
  13. <?php
  14.  
  15. $result = mysql_query("SELECT company FROM klient");
  16. $link = "";
  17. while ($data = mysql_fetch_assoc($result))
  18. $link .= "<option value='".$data['company']."'>".$data['company']."</option>";
  19. echo "<select name='company' style='width:250px;'>$link></select>";
  20.  
  21. ?>
  22.  
  23.  
  24.  
  25.   </table>
  26.  
  27.  
  28.  
  29.  <input type = "submit" value = "Dodaj">
  30. </form>
  31. </center>
  32.  
  33.  
  34. </html>


Moje pytanie jest następujące:
Jak wyciągnąc i wyrzucić na ekran wiecej informacji z tabeli klient? Tzn chodzi mi o coś takiego: Wybieram z SELECTA za pomoca listy rozwijanej klienta , zapisuje to do bazy i podczas wyswietlania zawartośći chciałbym aby wraz z klientem np wyświetliło ulice i kod pocztowy z tabeli KLIENT zgodne z jego ID?
erix
  1. JOIN

?
Kojak
Nie wiem czy dobrze zrozumiałem o co ci chodzi. Z tabeli orderstatus pobierasz sobie wartość z kolumny company. I chcesz aby od razu pobrał też wszystkie dane z tabeli klient, gdzie company odnosi się do tego z orderstatus?

  1. SELECT klient.city, klient.country, orderstatus.quantity, orderstatus.technology FROM klient, orderstatus WHERE klient.company=orderstatus.company
walldeck
Cytat(Kojak @ 23.07.2009, 13:37:36 ) *
Nie wiem czy dobrze zrozumiałem o co ci chodzi. Z tabeli orderstatus pobierasz sobie wartość z kolumny company. I chcesz aby od razu pobrał też wszystkie dane z tabeli klient, gdzie company odnosi się do tego z orderstatus?

  1. SELECT klient.city, klient.country, orderstatus.quantity, orderstatus.technology FROM klient, orderstatus WHERE klient.company=orderstatus.company


Dobrze zrozumiełeś, zaraz sprawdze, tylko pytanie czy baza musi być relacyjna? tzn czy muszą byc indeksy w bazie na tych rekordach do ktorego odwołuje sie zapytanie?
Skie
Cytat
Dobrze zrozumiełeś, zaraz sprawdze, tylko pytanie czy baza musi być relacyjna? tzn czy muszą byc indeksy w bazie na tych rekordach do ktorego odwołuje sie zapytanie?


Nie muszą, ale lepiej żeby były.
walldeck
Cytat(Kojak @ 23.07.2009, 13:37:36 ) *
Nie wiem czy dobrze zrozumiałem o co ci chodzi. Z tabeli orderstatus pobierasz sobie wartość z kolumny company. I chcesz aby od razu pobrał też wszystkie dane z tabeli klient, gdzie company odnosi się do tego z orderstatus?

  1. SELECT klient.city, klient.country, orderstatus.quantity, orderstatus.technology FROM klient, orderstatus WHERE klient.company=orderstatus.company


Dobra, okej, przyznam sie bez bicia że nie wiem jak to zapytanie umieścić w moim kodzie. Kombinowałem juz na rózne sposoby i nie wiem jak to użyć. Może ktoś mnie choć troche naprowadzić chciaż za pomoca czego to wywołać?
Kojak
A co dokładniej chcesz wyświetlić to cię naprowadzę
walldeck
Cytat(Kojak @ 24.07.2009, 21:36:32 ) *
A co dokładniej chcesz wyświetlić to cię naprowadzę


Chciałbym wyświetlić minumim 3 rekordy : company, city, postcode z tabeli klient poprzez tabele orderstatus. Chce zeby on automatycznie umiescil ten postcode i city po tym jak wybiore odpowiedniego klienta do formularza i wyswietlił całość razem z danymi wpisanymi do formularza z tabeli orderstatus wraz z company+city+postcode. Z tym ze nie mam pojecia jak to umieścić w kodzie. Próbowałem juz tak ale to chyba bardzo daleko od tego co ja chce:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-type" content="text/html; charset=utf-8"></head>
  4.  
  5.  
  6.  
  7.  
  8.  
  9. <?php
  10. (include "function.php");
  11. connect();
  12.  
  13.  
  14.  
  15. $query="SELECT * FROM orderstatus";
  16. $result=mysql_query($query);
  17.  
  18. $num=mysql_numrows($result);
  19.  
  20.  
  21. echo "<b><center>Struktura bazy danych</b><hr><br><br>";
  22.  echo '<a href="./formularz-order.html">Dodaj zlecenie</a> <br>';
  23. echo '<a href="./klient-add.html">Dodaj nowego klienta</a> <br><hr></center>';
  24. $i=0;
  25. while ($i < $num) {
  26.  
  27. $confirm=mysql_result($result,$i,"confirm");
  28. $ordernr=mysql_result($result,$i,"ordernr");
  29. $pieces=mysql_result($result,$i,"pieces");
  30. $width=mysql_result($result,$i,"width");
  31. $height=mysql_result($result,$i,"height");
  32. $quantity=((($width*$height)/10000)*$pieces);
  33. $sendby=mysql_result($result,$i,"sendby");
  34. $technology=mysql_result($result,$i,"technology");
  35. $dispatch=mysql_result($result,$i,"dispatch");
  36. $comment=mysql_result($result,$i,"comment");
  37. $company=mysql_result($result,$i,"company");
  38.  
  39.  
  40. $query1="SELECT klient.city, klient.country, klient.postcode FROM klient WHERE klient.company=orderstatus.company";
  41. $result1=mysql_query($query1);
  42. $num1=mysql_numrows($result1);
  43.  
  44.  
  45. $i=0;
  46. while ($i1 < $num1) {
  47.  
  48. $city=mysql_result($result1,$i1,"city");
  49.  
  50.  
  51. }
  52. }
  53.  
  54.  
  55.  
  56. echo "<b>Delivery date: $confirm </b><br>Order number: $ordernr<br>Number of pieces: $pieces<br>Width: $width<br>Height: $height<br>square meters : $quantity<br>send by: $sendby<br>technology :$technology<br>Sent from us: $dispatch<br>comments: $comment<br>company: $company<br><br>City: $city<br><hr><br>";
  57.  
  58. $i++;
  59. ?>
  60. </html>


Cytat(walldeck @ 26.07.2009, 13:13:39 ) *
Chciałbym wyświetlić minumim 3 rekordy : company, city, postcode z tabeli klient poprzez tabele orderstatus. Chce zeby on automatycznie umiescil ten postcode i city po tym jak wybiore odpowiedniego klienta do formularza i wyswietlił całość razem z danymi wpisanymi do formularza z tabeli orderstatus wraz z company+city+postcode. Z tym ze nie mam pojecia jak to umieścić w kodzie. Próbowałem juz tak ale to chyba bardzo daleko od tego co ja chce:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-type" content="text/html; charset=utf-8"></head>
  4. <?php
  5. (include "function.php");
  6. connect();
  7. $query="SELECT * FROM orderstatus";
  8. $result=mysql_query($query);
  9.  
  10. $num=mysql_numrows($result);
  11.  
  12.  
  13. echo "<b><center>Struktura bazy danych</b><hr><br><br>";
  14.  echo '<a href="./formularz-order.html">Dodaj zlecenie</a> <br>';
  15. echo '<a href="./klient-add.html">Dodaj nowego klienta</a> <br><hr></center>';
  16. $i=0;
  17. while ($i < $num) {
  18.  
  19. $confirm=mysql_result($result,$i,"confirm");
  20. $ordernr=mysql_result($result,$i,"ordernr");
  21. $pieces=mysql_result($result,$i,"pieces");
  22. $width=mysql_result($result,$i,"width");
  23. $height=mysql_result($result,$i,"height");
  24. $quantity=((($width*$height)/10000)*$pieces);
  25. $sendby=mysql_result($result,$i,"sendby");
  26. $technology=mysql_result($result,$i,"technology");
  27. $dispatch=mysql_result($result,$i,"dispatch");
  28. $comment=mysql_result($result,$i,"comment");
  29. $company=mysql_result($result,$i,"company");
  30. $query1="SELECT klient.city, klient.country, klient.postcode FROM klient WHERE klient.company=orderstatus.company";
  31. $result1=mysql_query($query1);
  32. $num1=mysql_numrows($result1);
  33.  
  34.  
  35. $i=0;
  36. while ($i1 < $num1) {
  37.  
  38. $city=mysql_result($result1,$i1,"city");
  39. }
  40. }
  41. echo "<b>Delivery date: $confirm </b><br>Order number: $ordernr<br>Number of pieces: $pieces<br>Width: $width<br>Height: $height<br>square meters : $quantity<br>send by: $sendby<br>technology :$technology<br>Sent from us: $dispatch<br>comments: $comment<br>company: $company<br><br>City: $city<br><hr><br>";
  42.  
  43. $i++;
  44. ?>
  45. </html>


Naprowadzi mnie ktoś?
Grzesiek1
Cytat
$sql = "SELECT t.*, f.*, p3.post_approve AS topic_approve" . $count_sql . "
FROM (" . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p3" . $join_sql_table . ")
WHERE $join_sql
AND p3.post_id = topic_first_post_id
AND f.forum_id = t.forum_id
$order_sql";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
}
Kawałek kodu co prawda z phpbb, ale ładnie rozpisane jest tutaj...
walldeck
Cytat(Grzesiek1 @ 27.07.2009, 21:41:58 ) *
Kawałek kodu co prawda z phpbb, ale ładnie rozpisane jest tutaj...


To mi raczej nie wiele pomoże skoro nie wiem jak to zjeść w php.... blinksmiley.gif
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.