Avatar billede Slettet bruger
29. november 2000 - 11:55 Der er 17 kommentarer og
1 løsning

Søgning i tabel

Hej!

Jeg vil gerne lave en søgefunktion der søger på følgende tabel:

user_id int(10) DEFAULT \'0\' NOT NULL auto_increment,
username varchar(40) DEFAULT \'\' NOT NULL,
user_regdate varchar(20) NOT NULL,
user_password varchar(32) DEFAULT \'\' NOT NULL,
user_email varchar(50),
user_sex varchar(15),
user_age int(10),
user_height int(10),
user_weight int(10),
user_hair_color varchar(15),
user_eye_color varchar(15),
user_from varchar(100),
user_seeks_male tinyint(2),
user_seeks_female tinyint(2),
user_seeks_couple tinyint(2),
user_profile_read int(10) DEFAULT \'0\',
user_sexual_orientation varchar(15),
user_relationship varchar(15),
user_intrest varchar(150),
user_description varchar(255),
user_viewemail tinyint(2),
user_ int(10),
user_posts int(10) DEFAULT \'0\',
user_attachsig int(2) DEFAULT \'0\',
user_rank int(10) DEFAULT \'0\',
user_level int(10) DEFAULT \'1\',
user_actkey varchar(32),
user_newpasswd varchar(32),
PRIMARY KEY (user_id)

Brugeren skal have mulighed for at vælge flere forskellige søgekriterier, og forespørgslen skal returnere user_id, username, user_sex og user_regdate.

Hvad er den simpleste løsning?

På forhånd tak! :-)
Avatar billede kasseper Nybegynder
29. november 2000 - 11:58 #1
Skal det være i ASP, eller hvordan får brugeren mulighed for at indtaste søge ord/kriterier ?
Avatar billede Slettet bruger
29. november 2000 - 12:02 #2
Sorry! Det skal være i PHP og brugeren har en række select og checkboxe der kan vælges eller krydses af. Der skal også være en enkelt textbox hvor brugeren kan indtaste eventuelle søgeord. Men den dropper jeg hvis det bliver for langhåret!
;-)
Avatar billede kasseper Nybegynder
29. november 2000 - 12:09 #3
Altså søgeord, er ikke langhåret, man kan f.eks. søge på et enkelt ord sådan her :
\"select * from MyTable where username = % søgeord %\"
Så returneres alt hvor username indeholder dit søgeord.
Desvære har jeg ikke forstand på PHP,men jeg kan godt noget SQL, så hvis du kun skal bruge din SQl statement, så er jeg på !
Avatar billede limemedia Nybegynder
29. november 2000 - 12:15 #4
skulle du ikke designe din database lidt bedre og forbedre hastigheden... Det ser ud til at du vil lege med lidt dating community.

Og du kunne evt. splitte nogle data op i flere relervante tabeller
Avatar billede razor Nybegynder
29. november 2000 - 12:17 #5
Avatar billede Slettet bruger
29. november 2000 - 13:48 #6
ljweb>> Hvad kan laves bedre i min database??

Ja det er til et dating-community, og hvis det kommer til at virke bliver det frigivet under OpenSource (Alt for mange kommercielle og dyre løsninger!)
Avatar billede limemedia Nybegynder
29. november 2000 - 13:51 #7
el_barto >> er det din eneste tabel eller har du flere ?
Avatar billede limemedia Nybegynder
29. november 2000 - 13:53 #8
én tabel !
user_id int(10) DEFAULT \'0\' NOT NULL auto_increment,
username varchar(40) DEFAULT \'\' NOT NULL,
user_regdate varchar(20) NOT NULL,
user_password varchar(32) DEFAULT \'\' NOT NULL,


er det muligt at vælge alle
user_seeks_male tinyint(2),
user_seeks_female tinyint(2),
user_seeks_couple tinyint(2),

hvorfor ikke lave en enkelt der hedder user_seeks og en smallint til at vælge hvad vedkommende søger m.v.


Hvis du deler dit data lidt mere op undgår du redundante data og kan foretage hurtigere søgninger i teksten.
Avatar billede kasseper Nybegynder
29. november 2000 - 14:47 #9
det med de hurtigere søgning, er vist en sandhed med modifikationer, husk på at opdeling til mange tabeller, kan kræve store joins...Ligeledes vil jeg give dig ret i at man til tider kan undgå redundante data, da man så ikke skal søge i nær så mange tabeller, så normaliser med omtanke, men GØR det...!
Avatar billede Slettet bruger
29. november 2000 - 16:21 #10
Brugeren skal kunne vælge en eller flere af user_seeks_male/female/couple.

Sagen er at noget af koden er taget fra et Forum der hedder phpBB, det var det der mest lignede det jeg skulle bruge.

Der er andre tabeller, en til det interne postsystem, og en der håndterer user sessions.

user_posts, user_attachsig, user_rank og user_level bliver fjernet, da de ikke skal bruges..Hjælper det lidt på det hele?
Jeg vil da gerne dele det op, men frygter at det bliver for uoverskueligt/rodet..
Avatar billede kasseper Nybegynder
30. november 2000 - 09:14 #11
Jeg syntes at du skal dele tabellerne op men KUN hvis DU SELV kan overskue det. At dele tabeller op ( altså lave en normalisering ), kræver en indsigt i databse design. Dels kræver det at man har kendskab, til relationer, fremmednøgler vs. kandidatnøgler. Dels kræver det at man er sikker på hvornår man skal stoppe med at opdele i tabeller for at opnå et tilfredstillende/efektivt design.
ANYWAY, så er det altså kun hvis et problem med redundante data, i det tilfælde at dine base nærmer sig en størrelse på omkring, 1 til 2 milioner poster. Før vil jeg ikke sige at man kan mærke en forskel i søgningerne, og slet ikke hvis du benytter en indeksering på de typiske søgefelter.

Det var så lidt at tænke over.
Hvis du lister de felter i din tabel der skal søges over og de kriterier du ønsker, skal jeg lave nogle select sætninger til dig...

Kasseper
Avatar billede Slettet bruger
30. november 2000 - 10:36 #12
Tak for det kasseper..

De felter jeg vil have at der kan søges i er:

user_sex varchar(15), (3 Checkboxe, mulighed : mand/kvinde/par)
user_age int(10),  (2 Textboxe, mulighed : indtast 2 tal, find brugere med alder mellem de 2 tal)
user_height int(10), (2 Textboxe, mulighed : samme som ovennævnte)
user_weight int(10), (2 Textboxe, mulighed : samme som ovennævnte)
user_hair_color varchar(15), (Selectbox, mulighed : vælg mellem 4 forskellige hårfarver, eller vælg at søge på alle)
user_eye_color varchar(15), (Selectbox, mulighed : vælg mellem 4 forskellige øjenfarver, eller vælg at søge på alle)
user_from varchar(100), (Selectbox, mulighed : vis nyeste indenfor 7/10/30 dage, eller vælg at søge på alle)
user_seeks_male tinyint(2), (Checkbox)
user_seeks_female tinyint(2),(Checkbox)
user_seeks_couple tinyint(2),(Checkbox)
user_sexual_orientation varchar(15),(Selectbox, mulighed : hetero, bi, homo, eller vælg at søge på alle)
user_relationship varchar(15),(Selectbox, mulighed : single, gift, kæreste, eller vælg at søge på alle)
Avatar billede Slettet bruger
30. november 2000 - 14:55 #13
Forestillede mig det kunne laves således:

$condition = \"user_id >= \'1\'\";

if (isset($user_seeks_female)) {
$condition = $condition & \"AND user_seeks_female = \'1\'\";
}
if (isset($user_seeks_male)) {
$condition = $condition & \"AND user_seeks_male = \'1\'\";
}
if (isset($user_seeks_couple)) {
$condition = $condition & \"AND user_seeks_couple = \'1\'\";
}

$resultat = mysql_query(\"select username, user_regdate from users WHERE $condition\");
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
  echo \"Navn: $username Oprettet: $user_regdate<br>\";
}

echo \"<tr><td width=100></td>\";
echo \"<td width=100>$resultat[0]</td>\";
echo \"<td width=200>$resultat[1]</td></tr>\";

?>

Men er ikke nogen HAJ til PHP og får SQL error....Det er squ ikke nemt :-)
Avatar billede kasseper Nybegynder
01. december 2000 - 08:17 #14
AAAARRGGHHHH, Shit jeg havde sq glemt at det skulle være i php, det må du sq undskylde, den kan jeg ikke klare...!
Avatar billede Slettet bruger
01. december 2000 - 09:43 #15
Det er OK. efter konsultation hos PHP-doktoren har jeg fået lavet det så det virker! :-)
Avatar billede kasseper Nybegynder
01. december 2000 - 10:00 #16
Perfekt.!
Avatar billede Slettet bruger
04. december 2000 - 13:36 #17
Jeg fandt selv ud af det, så point ryger tilbage til mig..
Avatar billede Slettet bruger
04. december 2000 - 13:37 #18
point tilbage!
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