Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skomplikowane zapytanie sql, Jak je ugryźć?
L_Devil
post
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


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


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
tmk
post
Post #2





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 15.04.2004
Skąd: w-wa

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


  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?
Go to the top of the page
+Quote Post
L_Devil
post
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


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)

Ten post edytował L_Devil 6.03.2006, 15:18:59


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
L_Devil
post
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


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!

Ten post edytował L_Devil 6.03.2006, 15:40:34


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
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 Aktualny czas: 20.08.2025 - 08:09