12. juli 2000 - 18:45Der 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 ?!?
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)
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...
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
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.
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.