Avanceret MySQL søgning vha PHP
Jeg arbejder på en database til registrering af kunstværker. Jeg arbejder bl.a. med henholdsvis en simpel og en avanceret søgefunktion (se evt. skærmprint på www.gimm.dk/kunstdatabase/old files/search.jpg).Der skal søges i tre tabeller: WORKS, NOTES, EXTRA_FILES
og min udfordring ligger i at joine disse tabeller korrekt, hvad der altså ikke er lykkedes.
Hovedtabellen er WORKS og dens PRIMARY KEY hedder W_ID. Indtastninger i tabellerne NOTES og EXTRA_FILES knytter sig således til et oprettet W_ID, og dette noteres med W_ID som FOREIGN KEY i både NOTES og EXTRA_FILES.
(se evt. dokumentation for tabeloprettelse på www.gimm.dk/kunstdatabase/old files/tabel-dokumentation.txt)
DEN SIMPLE SØGNING tester tabellerne for søgeordet.
Mit udspil til simpel søgning er:
$rows = mysql_query("select works.w_id AS wwid, sirname, firstname, title, materials, size, media, year, price, location, photo, note, notes.w_id AS nwid, filename1, filename2, filename3, filename4, filename5, extra_files.w_id AS efwid
from works, notes, extra_files
where works.w_id like '%$text_search%'
or sirname like '%$text_search%'
or firstname like '%$text_search%'
or title like '%$text_search%'
or materials like '%$text_search%'
or size like '%$text_search%'
or media like '%$text_search%'
or year like '%$text_search%'
or price like '%$text_search%'
or location like '%$text_search%'
or photo like '%$text_search%'
or note like '%$text_search%'
or filename1 like '%$text_search%'
or filename2 like '%$text_search%'
or filename3 like '%$text_search%'
or filename4 like '%$text_search%'
or filename5 like '%$text_search%'
AND notes.w_id = works.w_id
AND extra_files.w_id = works.w_id
order by sirname", $db);
DEN AVANCEREDE SØGNING matcher flere forskellige søgeord. F.eks titel, materiale og årstal.
Mit udspil til avanceret søgning er:
$rows = mysql_query("select works.w_id AS wwid, sirname, firstname, title, materials, size, media, year, price, location, photo, note, notes.w_id AS nwid, filename1, filename2, filename3, filename4, filename5, extra_files.w_id AS efwid
from works, notes, extra_files
where works.w_id like '%$w_id%'
and sirname like '%$sirname%'
and firstname like '%$firstname%'
and title like '%$title%'
and materials like '%$materials%'
and size like '%$size%'
and media like '%$media%'
and year between $from_year AND $to_year
and price between $from_price AND $to_price
and location like '%$location%'
and photo like '%$photo%'
and note like '%$note%'
and filename1 like '%$filename%'
and filename2 like '%$filename%'
and filename3 like '%$filename%'
and filename4 like '%$filename%'
and filename5 like '%$filename%'
AND notes.w_id = works.w_id
AND extra_files.w_id = works.w_id
order by sirname", $db);
200 point til det skarpe bud :-)
