Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mySql] Czy jest możliwe takie zapytanie?
Forum PHP.pl > Forum > Bazy danych > MySQL
maniak11
Witam mam problem z zapytaniem i zastanawiam sie czy w ogóle jest to do zrobienia (wydaje mi się, że tak).

Mam 2 tabele:

tabela nazwy

nazwa | sym
Warszawa | 123
Centrum | 322

W której to kolumnie nazwa są przechowywane nazwy miast jak i dzielnic (jest to baza ściągnięta z GUS-u)

i druga tabele

tabela
oferty

id | miasto | dzielnica
1 123 23423
2 234 322
i teraz w tej tabeli w kolumnach miasto i dzielnica są przechowywane numery SYM z pierwszej tabeli

I teraz chce proste zapytanie dać gdzie dane oferty będą zawierać dane miasto i dzielnicę. Wiadomo że ktoś wpisze w pole "Warszawa" a nie 123. Wiadomo też że takie coś odpada:

WHERE miasto = sym AND dzielnica = sym

i takie coś:

WHERE miasto = sym OR dzielnica = sym

Jak to zatem ugyźć? Chyba da sie to jakoś jednym zapytaniem zrobić prawda?

pozdrawiam wszystkich
thek
Zrób JOIN między tabelą nazw i tabelą ofert łącząc je tymi numerami, ale wyszukiwanie po nazwie smile.gif Czyli
  1. SELECT * FROM oferty o LEFT JOIN nazwy n1 ON o.miasto=n1.sym LEFT JOIN nazwy n2 ON o.dzielnica = n2.sym WHERE n1.nazwa LIKE '%nazwa%' OR n2.nazwa LIKE '%nazwa%'
Lub można kombinować podobnie, ale oczywiście limitując wyniki (paginacja) lub założyć fullindex na nazwę w tabeli miast i szukać fulltext searchem smile.gif Rozwiązań jak widzisz jest więcej niż jedno. Zależy jaki typ tabeli i jak bardzo dokładne mają być wyniki. To chyba to smile.gif

EDIT: były literówki biggrin.gif

EDIT2: Jako że ta tabela będzie często wykorzystywana to zastanawiam się czy nie byłoby dla Ciebie dobrze zamiast cały czas je łączyć, zrobić sobie perspektywę
maniak11
SUPER! Dzięki wielkie thek. Wszystko śmiga pięknie, ja zmieniłem tylko OR-a na AND-a w klauzuli WHERE bo chciałem znaleźć rekordy które zawierają w nazwie dane miasto i dzielnicę. Dzięki!
thek
Ja dałem OR, bo nie byłem pewien, czy nie chcesz szukać tylko po nazwach dzielnic, jak choćby: "Anin". Bo przecież nie daje się wtedy pełnej nazwy. Poza tym w takim wypadku jak piszesz wnioskuję, że masz 2 pola formularza. Do jednego dajesz miasto, a do drugiego dzielnicę. Uważaj więc i sprawdź co będzie jeśli podasz tylko jedno z nich winksmiley.jpg Stworzy się wtedy bowiem
WHERE n1.nazwa LIKE '%%' AND n2.nazwa LIKE '%nazwa%'
lub
WHERE n1.nazwa LIKE '%nazwa%' AND n2.nazwa LIKE '%%'
a to może Ci ładnie obciążyć. Sprawdzaj więc czy nie jest któreś puste i zmieniaj zapytanie w razie potrzeby jeśli tej składni się chcesz trzymać.
No i jeszcze jedno. Uważaj na apostrofy i inne rzeczy wchodzące do formularza. Walidacja na poziomie mysql_real_escape_string czy htmlspecialchars to minimum.
Ja bym na Twoim miejscu pokombinował przy tych dwóch i zmianach zapytania w zależności od potrzeb. To na pewno nie wyjdzie wydajności na złe smile.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.