Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySql] Problem z zaprojektowaniem bazy i z prawidłowym zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
mariuszg
witam
Ma to być tabela z danymi samochodów: marka, model, typ, silnik, kolor, typ_nadwozia, ABS, itd.

Tak pomyślałem że najlepiej do marki, modelu i typu zrobić osobne tabele i w tabeli głównej przechowywać tylko numery „id” co przyspieszy wyszukiwanie w bazie danej marki auta.
Nie wiem czy to najlepsze rozwiązanie.

Na razie tak zrobiłem i już mam problem z zapytaniem do bazy. Mam tak:


  1. CREATE TABLE `dane` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_marka` int(11) NOT NULL,
  4. `id_model` int(11) NOT NULL,
  5. `id_typ` int(11) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin2 AUTO_INCREMENT=9 ;
  8.  
  9. CREATE TABLE `marka` (
  10. `id` int(11) NOT NULL AUTO_INCREMENT,
  11. `marka` varchar(11) NOT NULL,
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin2 AUTO_INCREMENT=10 ;
  14.  
  15. CREATE TABLE `model` (
  16. `id` int(11) NOT NULL AUTO_INCREMENT,
  17. `id_marka` int(11) NOT NULL,
  18. `model` varchar(11) NOT NULL,
  19. PRIMARY KEY (`id`)
  20. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin2 AUTO_INCREMENT=10 ;
  21.  
  22. CREATE TABLE `typ` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `id_model` int(11) NOT NULL,
  25. `typ` varchar(11) NOT NULL,
  26. PRIMARY KEY (`id`)
  27. ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin2 AUTO_INCREMENT=12 ;



  1. <table width="200" cellspacing="0" cellpadding="0" border="1">
  2. <?php
  3. mysql_connect ('localhost','root','');
  4. mysql_select_db ('ddd');
  5.  
  6. $zapytanie = 
  7. SELECT marka, model, typ FROM dane, marka, model, typ
  8. WHERE dane.id_marka = marka.id and
  9. dane.id_model = model.id and
  10. dane.id_typ = typ.id
  11. ";
  12. $wykonaj = mysql_query ($zapytanie);
  13. while($wiersz=mysql_fetch_array ($wykonaj)) {
  14. <tr>
  15. <td>".$wiersz['marka']."</td>
  16. <td>".$wiersz['model']."</td>
  17. <td>".$wiersz['typ']."</td>
  18. </tr>
  19. ";
  20. }
  21. ?>
  22. </table>


I teraz np.:
marka : Fiat
model: 126
typ: 126 p , 126 el

Jeśli mam tylko markę auta lub markę i model to nic mi nie wyświetli. Muszę mieś komplet przy takim zapytaniu czyli markę model i typ. Jeśli w tabeli głównej będzie tylko id marki i nie będzie modelu i typu, żeby też wyświetliło.
Nie wiem jak napisać poprawnie takie zapytanie. Proszę pomoc.
wijet
Aby zobaczyć rekordy bez model_id,typ_id użyj do złączenia LEFT JOIN
mariuszg
zrobiłem tak:

  1. $zapytanie = " SELECT * FROM dane left join marka on dane.id_marka=marka.id ";


ale nie wiem jak dodać model i typ
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.