Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Produkt z obrazkiem
payonk
post 29.06.2006, 11:01:17
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.05.2006

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


Witam
Mam problem z zapytaniem SQL'owym.

Chce wyświetlić wszystkie produkty z odpowiadającymi im obrazkami.

[obrazek] [nazwa produktu]
[obrazek] [nazwa produktu]
[obrazek] [nazwa produktu]

- Każdy produkt może mieć wiele obrazków
- Chce wyświetlić tylko jeden obrazek przy każdym produkcie
- Jeden z wielu obrazków produktu może być oznaczony jako główny.
- Jeżeli jeden z obrazków produktu jest oznaczony jako główny, powinien być wyświetlony
- Jeżeli żaden z obrazków nie jest oznaczony jako główny wyświetlić się powinien pierwszy z brzegu smile.gif

Czyli
[produkt]
id_produkt
nazwa

[Obrazek]
id_obrazek
nazwa
czy_glowny
id_produkt

produkt.id_obrazek->obrazek.id_obrazek (relacja 1 do wielu)
produkt.czy_glowny przyjmuje wartości 1 lub 0

Czy ktoś może wie jak skonstruować zapytanie SQL (MySQL) najlepiej z wykorzystaniem JOIN ?

Ten post edytował payonk 3.07.2006, 09:24:17
Go to the top of the page
+Quote Post
Nostress
post 2.07.2006, 13:13:21
Post #2





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 28.05.2006

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


id_obrazek to oczywiście id produktu, do którego należy obrazek? Jeśli tak, to proszę:

  1. SELECT produkt.nazwa, obrazek.nazwa FROM produkt LEFT JOIN obrazek ON obrazek.id_obrazek=produkt.id_produkt ORDER BY produkt.id_produkt, obrazek.czy_glowny DESC


Ten post edytował Nostress 2.07.2006, 13:14:12
Go to the top of the page
+Quote Post
payonk
post 3.07.2006, 09:27:27
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.05.2006

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


Namieszałem trochę smile.gif przepraszam.
W pierwszej wiadmości poprawiłem wygląd tabel.
Go to the top of the page
+Quote Post
Nostress
post 3.07.2006, 11:09:47
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 28.05.2006

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


Zmiana jest niewielka w takim razie... winksmiley.jpg

  1. SELECT produkt.nazwa, obrazek.nazwa FROM produkt LEFT JOIN obrazek ON obrazek.id_produkt=produkt.id_produkt ORDER BY produkt.id_produkt, obrazek.czy_glowny DESC
Go to the top of the page
+Quote Post
payonk
post 3.07.2006, 19:02:12
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.05.2006

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


Nie sprawdzałem ale z tego co widzę to w momencie kiedy produkt posiada 30 obrazków, produkt wyświetli się 30 razy, a oczywiście powinien raz.

Wiem że można teraz pogrupować wyniki po produkt.id_produkt ale są 2 ale.

1 Nie jest to optymalne
2 Co z obrazkiem głównym, jeżeli istnieje powinien się wyświetlić właśnie on, a jeżeli wszystkie obrazki danego produktu mają flagę glowny ustawioną na 0 to powinien się wyświetlić pierwszy z brzegu.
Go to the top of the page
+Quote Post
Nostress
post 4.07.2006, 16:03:51
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 28.05.2006

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


Wyświetli się tylko produkt z jednym obrazkiem. A koncówka, tj. ORDER BY produkt.id_produkt, obrazek.czy_glowny DESC odpowiada za to, żeby w "kolejce" obrazków najpierw były te "główne".

Najpierw sprawdź, później pytaj.
Go to the top of the page
+Quote Post
payonk
post 6.07.2006, 10:34:05
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.05.2006

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


Ok wyświetla się tylko jeden. Ale niestety są złe wyniki.

Zapytanie wykonałem na bazie:

  1. CREATE TABLE `obrazek` (
  2. `id_obrazek` int(11) NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(32) NOT NULL,
  4. `id_produkt` int(11) NOT NULL,
  5. `czy_glowny` tinyint(1) NOT NULL,
  6. PRIMARY KEY (`id_obrazek`)
  7. );
  8.  
  9. INSERT INTO `obrazek` (`id_obrazek`, `nazwa`, `id_produkt`, `czy_glowny`) VALUES (1, 'pierwszy obrazek rowera', 1, 0),
  10. (2, 'drugi obrazek rowera', 1, 1),
  11. (3, 'czeci rower', 1, 0),
  12. (4, 'pierwszy motur', 2, 1),
  13. (5, 'dugi motur', 2, 0);
  14.  
  15. CREATE TABLE `produkt` (
  16. `id_produkt` int(11) NOT NULL AUTO_INCREMENT,
  17. `nazwa` varchar(20) NOT NULL,
  18. PRIMARY KEY (`id_produkt`)
  19. );
  20.  
  21. INSERT INTO `produkt` (`id_produkt`, `nazwa`) VALUES (1, 'rower'),
  22. (2, 'motur');


dostaję taki wynik:

[produkt.nazwa] [obrazek.nazwa]
rower pierwszy obrazek rowera
motur drugi obrazek rowera

Ten post edytował payonk 6.07.2006, 10:35:33
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: 24.06.2025 - 00:51