Avatar billede henninghabor Nybegynder
09. august 2006 - 21:42 Der er 2 kommentarer og
1 løsning

Avanceret søgning

Hej,

Jeg har et pladearkiv, hvor det skal være muligt at søge i de 2 databaser: records_albums og records_tracks.

Når man søger på et søgeord, skal der gøres følgende:
- Søg på artist og title i begge databaser.
- Udskriv resultat og marker det der matcher søgeord.
- Evt. sorter resultat efter ranking.

Er det noget du kan hjælpe med?

De 2 databaser ser sådan ud:

CREATE TABLE `records_albums` (
  `id` int(11) NOT NULL auto_increment,
  `artist` varchar(255) NOT NULL default '',
  `title` varchar(255) NOT NULL default '',
  `genre` int(11) default NULL,
  `released` int(11) default NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

CREATE TABLE `records_tracks` (
  `id` int(11) NOT NULL auto_increment,
  `album_id` int(11) default NULL,
  `artist` varchar(255) NOT NULL default '',
  `title` varchar(255) NOT NULL default '',
  `length` varchar(5) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
Avatar billede henninghabor Nybegynder
09. august 2006 - 21:44 #1
Du kan forresten se pladearkivet her: http://sporge-jorgen.dk/pladearkiv/
Avatar billede henninghabor Nybegynder
19. august 2006 - 13:36 #2
- Jeg fandt frem til at lave en UNION til at søge i begge databaser.
- Jeg brugte stristr til at fremhæve resultater der matcher søgeordet.
- Ranking har jeg endnu ikke fået lavet.

Her er min midlertidige løsning:

$print .= "<form action=\"search.php\" method=\"post\">\n";
$print .= "<h1>Search</h1>\n";
$print .= "<p>Keyword:<br>\n";
$print .= "<input type=\"text\" name=\"keyword\" value=\"" . stripslashes($_REQUEST["keyword"]) . "\" size=\"20\" class=\"formText\"></p>\n";
$print .= "<p><input type=\"submit\" name=\"submit\" value=\"Search\" class=\"button\">\n";
$print .= "<input type=\"reset\" name=\"reset\" value=\"Reset\" class=\"button\"></p>\n";
$print .= "</form>\n";

if(!empty($_REQUEST["keyword"]))
{
    $print .= "<table>\n";
    $print .= "<tr><th>Artist</th><th>Title</th><th></th></tr>\n";

    $query = mysql_query("(SELECT id, artist, title FROM records_albums WHERE artist LIKE '%" . $_REQUEST["keyword"] . "%' OR title LIKE '%" . $_REQUEST["keyword"] . "%') UNION (SELECT album_id AS id, artist, title FROM records_tracks WHERE artist LIKE '%" . $_REQUEST["keyword"] . "%' OR title LIKE '%" . $_REQUEST["keyword"] . "%')") or die(mysql_error());

    if(mysql_num_rows($query) > 0)
    {
        while($row = mysql_fetch_assoc($query))
        {
            $bg = $q++ % 2 ? 'F0F0F0' : 'FFF';

            $row["artist"] = htmlentities(strtoupper($row["artist"]));
            $row["artist"] = eregi_replace("(.*)(" . htmlentities(strtoupper($_REQUEST["keyword"])) . ")(.*)", "\\1<span style=\"color: #03F;\">\\2</span>\\3", $row["artist"]);

            $row["title"] = htmlentities(strtoupper($row["title"]));
            $row["title"] = eregi_replace("(.*)(" . htmlentities(strtoupper($_REQUEST["keyword"])) . ")(.*)", "\\1<span style=\"color: #03F\">\\2</span>\\3", $row["title"]);

            $print .= "<tr style=\"background: #" . $bg . ";\"><td>" . $row["artist"] . "</td>";
            $print .= "<td>" . $row["title"] . "</td>";
            $print .= "<td><a href=\"index.php?data=album&amp;id=" . $row["id"] . "\" title=\"View album\" style=\"background: #" . $bg . ";\">&raquo;</a></td></tr>\n";
        }
    }
    else
    {
        $print .= "<tr><td colspan=\"\">No result.</td></tr>\n";
    }

    mysql_free_result($query);

    $print .= "</table>\n";
}
Avatar billede henninghabor Nybegynder
18. oktober 2006 - 00:15 #3
Jeg lukker. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester