Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skomplikowane zapytanie sql
Forum PHP.pl > Forum > Bazy danych
L_Devil
Witam!

W mojej bazie danych przechowuję informacje w następującej tabeli:

Kod
+----+-------+---------+---------+
| id | owner |par_name |par_value|
+----+-------+---------+---------+
Gdzie id to jest id wpisu, owner to obiekt, do którego należy dany parametr - par_name nazwa parametru, par_value - jego wartość.
Chciałbym teraz przeprowadzić wyszukanie obiektu po wielu różnych parametrach i nie wiem jak ugryźć zapytanie sql. Powiedzmy taki przypadek:

Znajdź id obiektu (pole owner), którego parametr "nazwa" jest podoba (sql LIKE) do "%Wpisana nazwa%", którego parametr "kategoria" jest równe X, oraz którego parametr "Ocena" znajduje się w sumie zbiorów <1, 2>U<4, 6> (możliwe ułamki)

Jak się zabrać do czegoś takiego?

Nie mam najmniejszego pomysłu, dlatego każdą radę, która mnie naprowadzi na cel przyjmę z wielką wdzięcznością winksmiley.jpg
tmk
  1. SELECT obiekt
  2. FROM tabela
  3. WHERE par_name LIKE '%nazwa%' AND (par_value BETWEEN 1 AND 2 OR par_value BETWEEN 4 AND 6)

o to chodziło?
L_Devil
Gdyby było takie proste, sam bym na to wpadł winksmiley.jpg

Niestety, nie o to mi chodzi. Posłużę się może przykładem tabeli:

Kod
+====+=======+=========+==========+
| ID | OWNER |PAR_NAME |PAR_VALUE |
+====+=======+=========+==========+
| 1. |   1   |  nazwa  | Pomidor  |
| 2. |   2   |  nazwa  |Pomarańcza|
| 3. |   3   |  nazwa  |Marchewka |
-----------------------------------
| 4. |   1   |kategoria|    1     |
| 5. |   2   |kategoria|    2     |
| 6. |   3   |kategoria|    1     |
-----------------------------------
| 7. |   1   |  ocena  |   1.3    |
| 8. |   2   |  ocena  |   4.2    |
| 9. |   3   |  ocena  |   4.5    |

I teraz chcę pobrać z tego obiekt którego, powiedzmy, nazwa zaczyna się na "pom", należy do kategorii 1 i ma ocenę mniejszą niż 2 lub ocenę większą niż 4 (dla tego przykładu, będzie to obiekt 1)
DeyV
Kod
SELECT DISTINCT owner FROM tabela t1
INNER JOIN tabela t2 ON ( t2.owner  =  t1.owner and
    t2.PAR_NAME = 'nazwa' and
    t2.PAR_VALUE LIKE 'pom%'
)

INNER JOIN tabela t3 ON ( t3.owner  =  t1.owner and
    t3.PAR_NAME = 'ocena' and
     ( t3.PAR_VALUE < 2 OR  t3.PAR_VALUE > 4  )
)
WHERE  t1.PAR_NAME = 'kategoria' and t1.PAR_VALUE = 1
L_Devil
MySQL zwrócił komunikat:
Kod
#1052 - Column: 'owner' in field list is ambiguous


==edit==

Poprawiłem owner na t1.owner na samym początku zapytania - teraz śmiga idealnie biggrin.gif

Wielkie dzięki!
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.