Avatar billede spike. Nybegynder
15. oktober 2002 - 19:58 Der er 16 kommentarer

dobbelt søgning?

$foresp = mysql_query("SELECT * FROM test WHERE name LIKE '%$search_name%' AND adresse LIKE '%$search_adresse%' ORDER BY id DESC");

Hvordan får jeg den til at søge på at begge 2 ligner hinanden?

Det er ikke sikkert der er skrevet noget ind i en af dem. Så hvis f.eks. $search_name = "" skal den ikke blokere det hele ;)
Avatar billede Slettet bruger
15. oktober 2002 - 20:14 #1
$foresp = mysql_query("SELECT * FROM test WHERE name LIKE '%$search_name%' OR adresse LIKE '%$search_adresse%' ORDER BY id DESC");

Er det det du mener?
Avatar billede spike. Nybegynder
15. oktober 2002 - 20:41 #2
nej, den skal søge på både adresse og name, altså tingen skal opfylde begge.
Avatar billede Slettet bruger
15. oktober 2002 - 20:45 #3
Du må lige uddybe...
Avatar billede spike. Nybegynder
15. oktober 2002 - 20:47 #4
og hvis der ikke blive fyldt noget i den ene så gider den ikke
Avatar billede spike. Nybegynder
15. oktober 2002 - 20:48 #5
Altså man kan søge på 2 ting:

Navn
Gruppe

Når man søger på Hans og .. Vejle, så får man kun de Hans'er i databasen der også har gruppen Vejle. Altså begge 2 ting skal være opfyldt. Derfor AND

Problemet er bare, at hvis man vil søge på alle Hans'er, ikke bare nogen fra en bestem gruppe, så gider den ikke. Så får man en fejl. Der er ca 10 af disse søge kriterier, så jeg kan ikke lave if sætninger =(
Avatar billede Slettet bruger
15. oktober 2002 - 20:51 #6
Så skal vi nok se lidt mere kode.

"så gider den ikke" kan jo ikke rigtig bruges til fejlfinding ;)
Avatar billede spike. Nybegynder
15. oktober 2002 - 20:56 #7
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /net/users/a44/097//www//nfosearch.php on line 392

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /net/users/a44/097//www//nfosearch.php on line 393

Er de 2 fejl jeg får, linierne hedder:


$db = mysql_connect("localhost", "root", "password");
mysql_select_db("database", $db);
$foresp = mysql_query("SELECT * FROM nfos WHERE name LIKE '%$search_name%' AND group LIKE '%$search_group%' ORDER BY id DESC");
echo mysql_num_rows($foresp) . " Results: <br><br>";
while($data = mysql_fetch_array($foresp)){
}
Avatar billede Slettet bruger
15. oktober 2002 - 21:05 #8
Du må ikke kalde dine felter for reserverede ord.

group er et reserveret ord i SQL.

Prøv at omdøbe den til my_group istedet..
Avatar billede spike. Nybegynder
15. oktober 2002 - 22:11 #9
det virkede sq :) Tak for det, lig et svar
Avatar billede spike. Nybegynder
15. oktober 2002 - 22:11 #10
doh, ikke mig. dig ;)
Avatar billede nemeier Nybegynder
15. oktober 2002 - 22:17 #11
Prøv en gang at redesigne det statement, jeg ser du har 2 forespørgler igang. Prøv at gøre følgende:

$statement = "select * from test where ";
$markAND = 0;
if ($search_name)
{
  $statement = $statement + "name like '%$search_name%";
  $mark=1;
}
if ($nuked==0 or $nuked==1)
{
  if ($mark==1) { $statement = $statement + " AND "; }
  $statement = $statement + "nuked = '$nuked';
}
.. osv ..
$statement = $statement + " ORDER BY id DESC";
$foresp = mysql_query( $statement );
Avatar billede Slettet bruger
15. oktober 2002 - 22:20 #12
;) Det var godt det virkede...
Avatar billede spike. Nybegynder
15. oktober 2002 - 22:24 #13
nemier, mit script hedder lige nu

$foresp = mysql_query("SELECT * FROM nfos WHERE name LIKE '%$search_name%' AND groupe LIKE '%$search_group%' ORDER BY id DESC");

Det virker fint, man kan dog også vælge om man vil se dem hvor "nuked" er 1 eller 0 eller begge to. Hvordan vil du få det ind i det der?
Avatar billede nemeier Nybegynder
16. oktober 2002 - 08:06 #14
Hvis indholdet af $nuked er forskelligt fra 0 og 1 vil der ikke blive indsat en betingelse i mit foreslag, man kan selvfølgelig indsætte en anden variable for om man skal checke på nuked.

Til Spike, jeg har skrevet en udkast til en løsning hvis man vil have andre betingelser indbygget kan man bare gøre dette f.eks.

if ($search_group)
{
  if ($mark==1) { $statement = $statement + " AND "; }
  $statement = $statement + "groupe like '%$search_group%";
  $mark=1;
}
Ups jeg glemte at indsætte $mark=1 i $nuked testen

Hvis du ikke vil have søgningen til når brugeren ikke har valgt udvalg checker du på $mark inden du søger
Avatar billede spike. Nybegynder
16. oktober 2002 - 09:50 #15
hm, kan du ikke se om du kan få det sat op med $foresp ?
Avatar billede nemeier Nybegynder
16. oktober 2002 - 17:49 #16
Feltet $nukedOK er <> 0 hvis der skal søges på nuked, eller 0

$statement = "select * from test where ";
$markAND = 0;
if ($search_name)
{
  $statement = $statement + "name like '%$search_name%";
  $mark=1;
}
if ($search_group)
{
  if ($mark==1) { $statement = $statement + " AND "; }
  $statement = $statement + "groupe like '%$search_group%";
  $mark=1;
}
if ($nukedOk)
{
  if ($mark==1) { $statement = $statement + " AND "; }
  $statement = $statement + "nuked = '$nuked';
  $mark=1;
}
$statement = $statement + " ORDER BY id DESC";
if ($mark=1)
{
  // søgning brugeren har opsat felter
  $foresp = mysql_query( $statement );
 


}
else
{
  // Ingen søgning da brugeren ikke har udfyldt nogle informationer
}

Nu er det hele bygget sammen.
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
Computerworld tilbyder specialiserede kurser i database-management

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