Avatar billede dotcom1 Nybegynder
08. september 2005 - 12:34 Der er 2 kommentarer og
1 løsning

Søgning to gange i MySQL

Hej.

Jeg benytter dette script til at søge i en database:

<form name="form" action="search.php" method="get">
                      <input type="text" name="q" value=" Indtast søgeord" onclick="if(this.value==this.defaultValue)this.value=''" onblur="if(this.value=='')this.value=this.defaultValue" />
                      <input name="Submit" type="submit" class="submit_knap" value=" Søg " style="height:20px;" />
                </form><?php
  // Get the search variable from URL
  $var = @$_GET['q'] ;
  $trimmed = trim($var); //trim whitespace from the stored variable

    // rows to return
    $limit=15;

    // check for an empty string and display a message.
    if ($trimmed == "") {
    include ('misc/footer_soeg.php');
    exit;
  }

// check for a search parameter
    if (!isset($var)) {
  echo "<p>Angiv søgeparameter!</p>";
  exit;
  }
 
//Connect
include($_SERVER['DOCUMENT_ROOT']."/sql.php");

// Build SQL Query 
$query = "SELECT * FROM downloads WHERE kategori = 'Scripts' AND titel LIKE \"%$trimmed%\" ORDER BY downloads DESC";

$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);

// If we have no results, offer a google search as an alternative

if ($numrows == 0)
  {
  //echo "<h4>Resultater:</h4>";
  echo "<p>Beklager, din søgning efter <b>&quot;" . $trimmed . "&quot;</b> gav ingen resultater.</p>";

// google
echo "<p><a href=\"http://www.google.com/search?q="
  . $trimmed . "\" target=\"_blank\" title=\"Søg efter
  " . $trimmed . " på Google\" class=\"orange\">Klik her</a> for at søge på google.</p>";
  }

// next determine if s has been passed to script, if not use 0
  if (empty($s)) {
  $s=0;
  }

// get results
  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
//echo "<p>Du har søgt efter <b>&quot;" . $var . "&quot;</b></p>";

// begin to show results set
    if ($numrows > 0) {
    echo "<b>Resultater:</b><br />";
    $count = 1 + $s ;
}

// now you can display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["titel"];
   
  echo "$count.&nbsp;<a href=\"scripts/downloads.php?file=$row[name]\" class=\"plain\">$title</a><br />";
  $count++ ;
  }

  $currPage = (($s/$limit) + 1);

//break before paging
  echo "<br />";

  // next we need to do the links to other results
  if ($s>=1) { // bypass PREV link if s is 0
  $prevs=($s-$limit);
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt;
  Forrige</a>&nbsp&nbsp;";
  }
    if($count>$limit) {
// calculate number of pages needing links
  $pages=intval($numrows/$limit);

// $pages now contains int of pages needed unless there is a remainder from division

  if ($numrows%$limit) {
  // has remainder so add one page
  $pages++;
  }

// check to see if last page
  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

  // not last page so give NEXT link
  $news=$s+$limit;

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Næste&gt;&gt;</a>";
  }
}
$a = $s + ($limit) ;
  if ($a > $numrows) { $a = $numrows ; }
  $b = $s + 1 ;
  echo "<p>\n"
  ."------------------------------------<br />\n"
  ."Viser resultater $b til $a af $numrows</p>";
?>

Problemet er at når søger således:
$query = "SELECT * FROM downloads WHERE kategori = 'Scripts' AND titel LIKE \"%$trimmed%\" ORDER BY downloads DESC";
så udskriver jeg resultaterne som links sådan:
<a href=\"scripts/downloads.php?file=$row[name]\" class=\"plain\">$title</a>

Jeg vil gerne søge således:
$query = "SELECT * FROM downloads WHERE kategori = 'Opgaver' AND titel LIKE \"%$trimmed%\" ORDER BY downloads DESC";
og så udskrive således:
<a href=\"Opgaver/downloads.php?file=$row[name]\" class=\"plain\">$title</a>
- Altså i en anden mappe.

Kan man på en eller anden måde gøre, så når der findes resultater i kategori = 'Opgaver' så laver den linket Opgaver/downloads.php?file=... og når der findes resultater i kategori = 'Scripts' så udskriver den links som Scripts/downloads.php?file=... ?

Håber spørgsmålet er forståeligt.

Mvh.
Avatar billede coderdk Praktikant
08. september 2005 - 17:51 #1
$query = "SELECT * FROM downloads WHERE kategori = 'Scripts' AND titel LIKE \"%$trimmed%\" ORDER BY downloads DESC";

Laves om til:

$query = "SELECT * FROM downloads WHERE (kategori = 'Scripts' OR kategori = 'Opgaver') AND titel LIKE \"%$trimmed%\" ORDER BY downloads DESC";

Og

echo "$count.&nbsp;<a href=\"scripts/downloads.php?file=$row[name]\" class=\"plain\">$title</a><br />";

Laves om til:

echo "$count.&nbsp;<a href=\"";
if ( $row['kategori'] == 'Scripts' )
{
    echo "scripts";
}
else
{
    echo "Opgaver";
}
  echo "/downloads.php?file=$row[name]\" class=\"plain\">$title</a><br />";
Avatar billede dotcom1 Nybegynder
08. september 2005 - 17:57 #2
Du er for sej! :)
Avatar billede coderdk Praktikant
08. september 2005 - 17:58 #3
heheh :-D tak for points :)
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