Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] problem z selectem
Forum PHP.pl > Forum > Przedszkole
slawek3422
Mam następujący problem:

Są sobie tabele:
monitor
(id_monitora, nazwa)
kategorie
(id_kategorii, nazwa)
parametry
(id_parametru, id_kategorii, parametr)
parametry_monitora
(id_parametru_monitora, id_monitora, id_parametru)

Wewnątrz tabel są wpisane monitory oraz ich parametry techniczne.
W przypadku kiedy chcę wyświetlić monitory których parametr ma jakieś ID np 53 to nie ma problemu - wyświetlają się. Natomiast jeśli chcę wyświetlić monitory, które mają parametry o ID np 52 i 53 za pomocą takiego zapytania:
  1. <?php
  2. SELECT nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru AND parametry_monitora.id_parametru IN (52, 53) ORDER BY nazwa ASC
  3. ?>


to wyświetlają się monitory, które mają parametr 52 oraz te które mają parametr 53 a ja chcę mieć tylko takie które mają obydwa parametry czyli 52 i 53.

Wpadłem na pomysł żeby dać:

  1. <?php
  2. SELECT nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru AND parametry_monitora.id_parametru = 52 AND parametry_monitora.id_parametru = 53 ORDER BY nazwa ASC
  3. ?>


ale nie działa sad.gif

jak to ugryźć ?
Hazel
  1. SELECT id_monitora.nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru AND (parametry_monitora.id_parametru=52 OR parametry_monitora.id_parametru=53) GROUP BY parametry_monitora.id_monitora ORDER BY id_monitora.nazwa
slawek3422
Niestety nie zadziałało.
Może nakreślę jaśniej o co mi chodzi.
Powiedzmy, że jest monitor X który posiada parametr o ID 52, jest monitor Y który posiada parametr o ID 53 i jest monitor Z który posiada parametr o ID 52 i 53.

Zapytanie, które zaproponowałeś wyświetli wszystkie trzy monitory a ja chcę żeby był tylko ten, który ma obydwa parametry
Hazel
  1. SELECT id_monitora.nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru GROUP BY parametry_monitora.id_monitora HAVING parametry_monitora.id_parametru=52 AND parametry_monitora.id_parametru=53 ORDER BY id_monitora.nazwa



No to chyba powinno działać.
adasiu
Cytat(slawek3422 @ 12.03.2009, 16:00:35 ) *
Wpadłem na pomysł żeby dać:

  1. <?php
  2. SELECT nazwa FROM monitor, parametry, parametry_monitora WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru = parametry.id_parametru AND parametry_monitora.id_parametru = 52 AND parametry_monitora.id_parametru = 53 ORDER BY nazwa ASC
  3. ?>


ale nie działa sad.gif

jak to ugryźć ?


a nie ma być czasem
  1. SELECT
  2. nazwa
  3. FROM monitor, parametry, parametry_monitora
  4. WHERE monitor.id_monitora = parametry_monitora.id_monitora AND parametry_monitora.id_parametru_monitora = parametry.id_parametru AND parametry_monitora.id_parametru = 52 AND parametry_monitora.id_parametru = 53
  5. ORDER BY nazwa ASC
slawek3422
niestety żadna z Waszych podpowiedzi nie działa sad.gif zaraz zacznę podejrzewać problem z bazą danych (źle stworzone tabele) albo z serwerem sad.gif

W ogóle nie działa nawet takie zapytanie:

  1. SELECT id_monitora
  2. FROM parametry_monitora WHERE id_parametru =52 AND id_parametru =2;


a w tej tabeli są wpisy o które pytam bo dany monitor ma wiele parametrów i na pewno istnieje taki który ma parametry o podanych przeze mnie w zapytaniu numerach ID sad.gif
pomovy_szukam11
mam problem jak zrobić post i go zapisać [?]
Marr
@slawek3422

spróbuj sobie wykonać swoje zapytanie bezpośrednio na bazie danych, np w okienku SQL phpmyadmin'a i wtedy zobaczysz czy problem lezy w zle skonstruowanym zapytaniu czy po stronie php.
slawek3422
no właśnie że nie działa w phpMyAdminie sad.gif

działa tylko wtedy jak dam, że id_parametru in (52, 2) ale wtedy wyświetli mi monitory, które mają którykolwiek z podanych parametrów a mi chodzi o to, żeby monitor spełniał wszystkie warunki

czyżby takie zapytanie nie było możliwe ? może źle skonstruowana tabela / baza ?
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.