SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
|
24. 06. 2011. | #1 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Explain Query
Please
Ovako imam pitanje u vezi querya, radi se o pretrazi atributa, pretražuju se atributi sa id brojem 6 i 8, queryi rade ali ne kako očekujem... 1. PHP kôd:
2. PHP kôd:
Pitanje je kako da atribut 6 bude "La" i atribut 8 bude "Ho" i oba uslova budu zadovoljena inače da ne vrati ništa Riješio sam ovo na drugi način jer ima još komplikacija ali me čisto zanima gdje griješim. Hvala. Tabela: Poslednja izmena od webarto : 24. 06. 2011. u 05:30. |
24. 06. 2011. | #2 | |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Citat:
Šta ustvari želiš da dobiješ kao rezultat? Po meni, čini se da ti upravo treba ova prva varijanta sa ((AND) OR (AND)).
__________________
blog |
|
24. 06. 2011. | #3 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Ma ne, znam da ne može i treba da ne može, već ovakva je situacija...
resource_id attribute_id attribute_value 1 6 La Iruela 1 8 Hotel 2 8 Hotel Potreban mi je query, da mi vrati ovaj resource_id da je 1 ako i samo ako atribut 6 sadrži "La" a atribut 8 sadrži "Ho"... ako recimo postoji atribut 8 sa "Ho" a ne postoji atribut 6 sa "La", query bi trebao da vrati ništa. Nadam se da me razumiješ. Hvala. |
24. 06. 2011. | #4 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
A pa ne može to tako onda.
Uradi inner join tabele na samu sebe preko resource_id, gde ćeš u where da staviš da leva strana joina ima 6-La, a desna 8-Ho. Btw, LIKE 'Ho%' je mnogo brže od LIKE '%Ho%', imaj to u vidu.
__________________
blog Poslednja izmena od jablan : 24. 06. 2011. u 12:13. |
"Hvala" jablan za poruku: |
24. 06. 2011. | #5 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Ja sam to ovako bio ali mi "ružno" izgleda pogotovo što se pretražuju još par atributa osim ova 2... PHP kôd:
Poslednja izmena od webarto : 24. 06. 2011. u 12:26. |
24. 06. 2011. | #6 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Imaš tu jedan join viška. U suštini, treba ti ovo (pretpostavljam):
Kôd:
SELECT * FROM resources r LEFT JOIN resource_attributes a_6 ON r.id = r.resource_id AND a_6.attribute_id = 6 LEFT JOIN resource_attributes a_8 ON r.id = r.resource_id AND a_8.attribute_id = 8 WHERE a_6.attribute_value LIKE 'La%' AND a_8.attribute_value LIKE 'Ho%'
__________________
blog |
"Hvala" jablan za poruku: |
24. 06. 2011. | #7 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Kako si znao da je tabela resources
Malo sam prepravio, to je to, svaka čast. PHP kôd:
|
25. 06. 2011. | #8 | |
profesionalac
Qualified
Datum učlanjenja: 23.06.2005
Poruke: 196
Hvala: 35
35 "Hvala" u 30 poruka
|
Citat:
Kôd:
SELECT r.id FROM resources r WHERE 2 = ( SELECT COUNT(*) FROM resource_attributes ra WHERE ra.resource_id = r.id AND ( attribute_value LIKE '%La%' AND attribute_id = 6 OR attribute_value LIKE '%Ho%' AND attribute_id = 8)) |
|
24. 06. 2011. | #9 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
To je konvencija koju uostalom fura i ActiveRecord (ORM za Rails). BTW, ako ti zaista treba samo id tog resursa (a ne i ostala polja), nema potrebe da se joinuje sa tom tabelom, nego samo:
Kôd:
SELECT a_6.resource_id FROM resource_attributes a_6 INNER JOIN resource_attributes a_8 ON a_6.resource_id = a_8.resource_id WHERE a_6.attribute_id = 6 AND a_8.attribute_id = 8 AND a_6.attribute_value LIKE 'La%' AND a_8.attribute_value LIKE 'Ho%'
__________________
blog |
24. 06. 2011. | #10 | |
profesionalac
Qualified
Datum učlanjenja: 23.06.2005
Poruke: 196
Hvala: 35
35 "Hvala" u 30 poruka
|
Citat:
Kôd:
SELECT *, COUNT(*) as broj_atributa FROM resource_attributes WHERE (attribute_value LIKE '%La%' AND attribute_id = 6) OR (attribute_value LIKE '%Ho%' AND attribute_id = 8) GROUP BY resource_id HAVING broj_atributa = 2 |
|
"Hvala" dacha za poruku: |
|
|