Złożenie zapytania SQL

Złożenie zapytania SQL
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam wszystkich
Mam pewien problem, a mianowicie
Mam jedną tabelę Ad w której przechowuje podstawowe informacje na temat ogłoszenia natomiast w drugiej tabeli AdDetails przechowuje dodatkowe infformację o ogłoszeniu w formie
ad_id, field, value
np.

Kopiuj
23, l_pokoi, 3
23, powierzchnia, 103

Teraz chcę wyszukać wszystkie ogłoszenia w których liczba pokoi równa się 3 i powierzchnia jest większa niż 103 i tu pojawia się problem.

sephirot8608
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
Kopiuj
SELECT * FROM Ad
INNER JOIN AdDetails AS DET1 ON (DET1.ad_id = Ad.id AND DET1.field  = 'l_pokoi' AND DET1.value = 3  )
INNER JOIN AdDetails AS DET2 ON (DET2.ad_id = Ad.id AND DET2.field = 'powierzchnia' AND DET2.value > 103)

Nie testowane.

EDIT: Poprawione

  • Rejestracja: dni
  • Ostatnio: dni
0

No tak ale w AdDetails nie ma takich pól jak l_pokoi tylko
field = l_pokoi, value = 4

Wiele ogłoszeń ma wiele róznych parametrów i bez sensu byłoby dodawać dla każdego szczegółu oddzielne pole. Przy kolejnym nowym szczególe w nowym ogłoszeniu należałoby przebudowywać znów tabelę.

MK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 126
1

Ja bym zrobił tak:

Kopiuj
SELECT * FROM Ad
INNER JOIN AdDetails AS d1 ON d1.ad_id = Ad.id AND d1.field='l_pokoi' AND d1.value=3
INNER JOIN AdDetails AS d2 ON d2.ad_id = Ad.id AND d2.field='powierzchnia' AND d2.value > 103
  • Rejestracja: dni
  • Ostatnio: dni
0
mk napisał(a):

Ja bym zrobił tak:

SELECT * FROM Ad
INNER JOIN AdDetails AS d1 ON d1.ad_id = Ad.id AND d1.field='l_pokoi' AND d1.value=3
INNER JOIN AdDetails AS d2 ON d2.ad_id = Ad.id AND d2.field='powierzchnia' AND d2.value > 103

Kopiuj


Działa :) Dzięki wielkie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.