Avatar billede limemedia Nybegynder
12. juli 2000 - 18:45 Der er 8 kommentarer og
2 løsninger

Så er gode råd sgu dyre

Jeg har udviklet en mini-søgefunktion til en website jeg er temmelig involveret i.

CREATE TEMPORARY TABLE tempsearch (ProdID varchar(16), Title varchar(64));
INSERT INTO tempsearch SELECT ProdID, Title FROM rogernet_product WHERE Title LIKE '%microsoft%' GROUP BY ProdID;
INSERT INTO tempsearch SELECT ProdID, Title FROM rogernet_product WHERE Description LIKE '%microsoft%' GROUP BY ProdID;
SELECT * from tempsearch GROUP BY ProdID ORDER BY Title;
DROP TABLE tempsearch;

Jeg laver en temporær tabel, da mySQL ikke understøtter "OR" endnu ;( - nu er det min "vidunderlige" host ikke understøtter Tempoære tabeller... Nogle gode ideer til hvordan vi lige grejer den her ?!?
Avatar billede limemedia Nybegynder
12. juli 2000 - 18:48 #1
Jeg skal selvfølgelig have samme resultat ud af queryen, blot uden at bruge temporære tabeller...
Avatar billede limemedia Nybegynder
12. juli 2000 - 20:36 #2
Mit eksempel er baseret på http://www.mysql.com/documentation/manual.php?section=Searching_on_two_keys

Der må da være nogen der ved noget
Avatar billede limemedia Nybegynder
12. juli 2000 - 20:43 #3
mySQL understøtter ikke engang en UNION ;(
Avatar billede erikjacobsen Ekspert
12. juli 2000 - 21:00 #4
Hvor store resultater drejer det sig om? Du kan jo altid lave et array, hvor du tager
resultatet fra en select efterfulgt af resultatet af en anden select. Undervejs kan du
evt. teste på størrelsen af svarene for at afgøre hvad du vil.

Du er nok nødt til at programmere dig ud af det i PHP (eller lignende).

Det vil bestemt være realistisk hvis du f.eks. viser 10 resultater pr. side.

Hvorfor iøvrigt kan du ikke bare vise resultater fra første select, og derefter fra den
anden ??

Kan du ikke klare temporære tabeller, kan du jo lave en eksplicit ny tabel (men et
sjovt, unikt navn), eller smide det i en kommasepareret fil (også med et sjovt navn)

...bare nogle ideer....
Avatar billede limemedia Nybegynder
12. juli 2000 - 21:09 #5
1) lige nu er der 120 entries i tabellen, men det er til et admin tool i en shopløsning, så >1000 indenfor en uge vil ikke være usandsynligt

2) damn... måske skulle jeg anskaffe mig en mere seriøs database ala MS SQL 7.0

3) er planlagt, når søgningen ellers virker

4) Det kan jeg også, men ville gerne undgå redundante resultater.

5) hmm, måske en mulighed til jeg får skiftet host... har skumle planer om dit råd, communitech, men de svarer ikke på min mail ;(
Avatar billede erikjacobsen Ekspert
12. juli 2000 - 21:47 #6
Hvis du har et konkret spørgsmål til Communitech kan jeg da godt stille det, som kunde.
I går fik jeg et svar på mindre end 5 minutter - men der er faktisk enkelte andre, der siger, at de har
problemer med kundeservice hos CT. Jeg valgte oprindelig CT bla.a. fordi de rent faktisk svarede
mig fornuftigt inden jeg blev kunde.

Hvad med følgende nørdede løsning. Det du søger på hælde du ind i en speciel søgetabel:

  Søgeord, Extern tabel navn, Extern tabel id

Så laver du søgningen her, finder hvilken, eller hvilke tabeller, der matcher, og herefter slår
du så op med den unikke id (typisk autonum) som du selvfølgelig har. Du skal nu ved indsættelse
opdatere en tabel ekstra - men hvad pokker...
Avatar billede limemedia Nybegynder
12. juli 2000 - 21:59 #7
Jeg fandt løsningen med
    $UniqDBID = md5(uniqid(rand()));
    mysql_query("CREATE TABLE $UniqDBID (ProdID varchar(16),  CategoryID int(11), Title varchar(64))");
    mysql_query("INSERT INTO $UniqDBID SELECT ProdID, CategoryID, Title FROM rogernet_product WHERE Title LIKE '%$query%' GROUP BY ProdID");
    mysql_query("INSERT INTO $UniqDBID SELECT ProdID, CategoryID, Title FROM rogernet_product WHERE Description LIKE '%$query%' GROUP BY ProdID");
    $SearchResult = mysql_query("SELECT * from $UniqDBID GROUP BY ProdID ORDER BY Title");
    mysql_query("DROP TABLE $UniqDBID");

Det virker ok... Jeg vil have mig en NT Developer, så jeg kan få SQL 7.0 support
Avatar billede limemedia Nybegynder
12. juli 2000 - 22:15 #8
Erik >> det eneste jeg ville spørge Communitech om var oppetid og PHP4 support.

Du ledte mig på sporet af resultatet... Jeg havde fostret idéen, men ikke fuldført. Derfor må nogle af points'ne være dine ...
Avatar billede erikjacobsen Ekspert
13. juli 2000 - 08:43 #9
Hvor betænksomt, Lars. Det kan vi godt sige. Jeg vil dog foreslå dig en lile ændring:

  $UniqDBID = 'x'.md5(uniqid(rand()));

og så sørge for at ingen andre tabeller begynder med 'x'. Ja, md5 giver med stor sandsynlighed
et navn du ikke har i forvejen, men bare for at være helt sikker. På denne måde kan du
også meget nemmere rydde op, hvis der viser sig at være overflødige tabeller i DB-en.

Om CT: De lover - og holder - god oppetid. Den server jeg deler med andre havde en dags
problemer - en harddisk - og jeg fik en ekstra måned gratis. Men ellers har de altid været oppe.
PHP4 - jeg spørger dem lige.
Avatar billede limemedia Nybegynder
13. juli 2000 - 08:44 #10
Tak for den ;D
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