Jak sformułować zapytanie SQL ?
Marek - 13-11-2006 00:44
Jak sformułować zapytanie SQL ?
Witam,
Chciałbym wyświetlić listę 10 najbardziej podobnych produktów sklepu internetowego. Miarą podobieństwa jest posiadanie zbliżonej ilości tych samych cech produktu. Ułożyłem zatem następujące zapytanie do bazy:
$sql="SELECT * FROM document WHERE document_id IN ( SELECT dp2.document_id FROM document3_property dp1, document3_property dp2 WHERE dp1.document_id=".$documentId." AND dp1.property3_option_id=dp2.property3_option_id GROUP BY dp2.document_id ORDER BY count(dp2.document_id) DESC LIMIT 10" )";
Tabela document3_property posiada identyfikator cechy produktu w polu property3_option_id oraz identyfikator dokumentu document_id, do którego przynależy dana cecha. Zapytanie funkcjonuje lecz nie jestem w stanie wydobyć z niego wartości count(dp2.document_id), która jest miarą podobieństwa. Jednocześnie interesuje mnie dostępność do wszystkich pól struktury document. Czy istnieje możliwość wydobycia wartości count(dp2.document_id) bez zadawania kolejnego podzapytania do bazy?
-- Pozdrawiam, Marek
Paweł Matejski - 13-11-2006 00:45
Marek wrote: > Witam, > > Chciałbym wyświetlić listę 10 najbardziej podobnych produktów sklepu > internetowego. Miarą podobieństwa jest posiadanie zbliżonej ilości tych > samych cech produktu. Ułożyłem zatem następujące zapytanie do bazy: > > $sql="SELECT * FROM document WHERE document_id IN ( > SELECT dp2.document_id > FROM document3_property dp1, document3_property dp2 > WHERE dp1.document_id=".$documentId." > AND dp1.property3_option_id=dp2.property3_option_id > GROUP BY dp2.document_id > ORDER BY count(dp2.document_id) DESC > LIMIT 10" > )"; > > Tabela document3_property posiada identyfikator cechy produktu w polu > property3_option_id oraz identyfikator dokumentu document_id, do którego > przynależy dana cecha. Zapytanie funkcjonuje lecz nie jestem w stanie > wydobyć z niego wartości count(dp2.document_id), która jest miarą > podobieństwa. Jednocześnie interesuje mnie dostępność do wszystkich pól > struktury document. Czy istnieje możliwość wydobycia wartości > count(dp2.document_id) bez zadawania kolejnego podzapytania do bazy?
Rozbuduj zewnętrzne zapytanie tak, żeby było takie jak wewnętrzne + operowanie na tabli document. Będzie operowało juz tylko na 10 rekordach, więc będzie szybkie w stosunku do wewnętrznego.
-- P.M.
Marek - 13-11-2006 00:45
> Rozbuduj zewnętrzne zapytanie tak, żeby było takie jak wewnętrzne + > operowanie > na tabli document. Będzie operowało juz tylko na 10 rekordach, więc będzie > szybkie w stosunku do wewnętrznego.
Dzięki, właśnie miałem wątpliwości co do wydajności...
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|