Ga naar inhoud

Zoek script voor MySQL data


Anoniem2

Aanbevolen berichten

Het is een aardige tijd geleden maar ik ben inmidels weer bezig met me website.\r\nMomenteel ben ik nogsteeds bezig met het photo album.\r\nNou wil ik bezoekers de mogenlijkheid geven om naar photos te zoeken aan de hand van informatie die ik heb opgeslagen in mijn MySQL database.\r\n\r\nNou is mijn vraag hoe kan ik zo\'n zoek script maaken die aan de hand van een trefwoord in mijn database de bijbehoorende photo ophaald?\r\n\r\nOp [url]http://www.sjoukito.com/galerie2.php[/url] heb ik een begin gemaakt van mijn album pagina, op en aanmerkingen zijn uiteraard altijd welkom :-p
Link naar reactie
Het makkelijkst is, mits je tabel type MyIsam is, om LIKE te gebruiken. Bijvoorbeeld zo:\n[code]\nSELECT id, titel, beschrijving FROM tabel WHERE titel LIKE \'%zoekwoord%\'\n[/code]Je kan ook iets doen met FULLTEXT search:\n[code]SELECT id, titel, beschrijving FROM tabel WHERE MATCH(titel, beschrijving) AGAINST (\'zoekwoord\')[/code]
Link naar reactie
Er zullen ongetwijfeld kant en klare scripts zijn, maar die ken ik verder niet. Het is redelijk simpel om zoiets te maken, het volgende zou in principe al kunnen werken:\n[php]\n\';\n while($row = mysql_fetch_assoc($result))\n {\n echo $row[\'titel\'].\'
\'.$row[\'beschrijving\'];\n }\n }\n else\n {\n echo \'Er is iets fout gegaan bij het zoeken in de database.\';\n }\n}\nelse\n{\n ?>\n \n Zoeken op titel: \n \n \n \n[/php]Je zult een aantal waarden moeten aanpassen, want ik weet niet hoe jouw datamodel er uit ziet. Daarnaast zul je waarschijnlijk de HTML ook wat willen opmaken.\nIk ben er hier vanuit gegaan dat er al een database connectie is, je moet dus nog wel je databaseconnectie aan het begin van het script maken. Bijv. door gewoon de code uit een ander script te kopiëren of door een config.php bestand te includen.\n\nMocht je wat uitleg nodig hebben bij het stukje code hier boven dan hoor ik het wel.
Link naar reactie
Ok dit is op zich een reddenlijk simpel scriptje en werkt netjes.\r\nNou is het de bedoeling dat men in het MySQL database kan zoeken aan de hand van verschilende zoek mogenlijkheden namenlijk op bijvoorbeeld een plaatsnaam, datum, onderwerp etc. \r\nin het database staat dus de naam van een afbeelding, de datum, de locatie het onderwerp en veel meer.\r\nUiteindelijk moet er de bijbehoorende fotos in de tabel op de website geplaatst worden op deze pagina [url]http://www.sjoukito.com/galerie2.php[/url] (de layout is uiteraard nog lang niet af)\r\n\r\nDus bijvoorbeeld als mensen zoeken naar een foto uit Indonesie dan krijgt men de 16 meest recente fotos te zien die gemaakt zijn in Indonesie met er onder de bijbehoorende titel en kan men de overige resultaten zien door verder te bladeren. \r\n\r\nHoe kan ik dit het beste maken?\r\nIk neem aan dat ik het betrefende script aandig moet uitbreiden maar wat zijn nou de echte kern punten?
Link naar reactie
Het kernpunt is de SQL query. De layout moet dusdanig zijn dat deze altijd gebruikt kan worden ongeacht de gebruikte query.\n\nWat betreft die query heb je twee opties: een AND of een OR query. Bij de AND query worden alleen de resultaten getoond die aan alle opgegeven eisen voldoen. Bij de OR query worden alle resultaten getoond die aan minimaal één van de opgegeven eisen voldoen.\n\nQuery wordt dan zoiets:\n[php]$qryAND = \"SELECT * FROM `tabelnaam` WHERE (`naam` LIKE \'%\".$naam.\"%\' AND `locatie` LIKE \'%\".$locatie.\"%\' AND `datum` < \'\".$maxdatum.\"\' AND `datum` > \'\".$mindatum.\"\') ORDER BY `id` DESC LIMIT 16\";[/php]\n\nDesgewenst kun je AND door OR vervangen:\n[php]$qryOR = \"SELECT * FROM `tabelnaam` WHERE (`naam` LIKE \'%\".$naam.\"%\' OR `locatie` LIKE \'%\".$locatie.\"%\' OR (`datum` < \'\".$maxdatum.\"\' AND `datum` > \'\".$mindatum.\"\')) ORDER BY `id` DESC LIMIT 16\";[/php]\n\nDe LIMIT 16 zorgt ervoor dat alleen de 16 eerstgevonden record worden getoond.
Link naar reactie
  • 1 maand later...
Ik heb een zoek script formulier gemaakt welke uiteindelijk het \"uitgebreid zoeken\"script moet worden voor de foto\'s in het database. [url]http://www.sjoukito.com/search.php[/url]\n\nuiteindelijk moeten de resultaten hier van dus getoond worden op deze site met een limiet van 16 foto\'s per scherm en als men dus op de onderste groene pijl klikt moeten de volgende 16 foto\'s getoond worden. \n\nhoe zouden jullie dat aanpakken en waar zouden jullie beginnen?\n[url]http://www.sjoukito.com/galerie2.php[/url]
Link naar reactie
Voor het weergeven van de foto\'s bij de resultaten kun je bijna dezelfde query gebruiken als bij galerie2.php. Het makkelijkst kun je de gegevens tussen SELECT en FROM in galerie2.php kopieeren naar de gegevens tussen SELECT en FROM in de resultaten. Zo heb je de originele query met de WHERE\'s voor het zoeken.\n\nVoor het maximum van 16 weergaves kun je heel simpel werken met LIMIT:\nLIMIT 0,16 toont de eerste 16 (resultaten 0 t/m 16)\nLIMIT 16,32 toont de 2e groep van 16 (resultaten 16 t/m 32)\nen zo verder
Link naar reactie
Ik heb inmiddels een flink aantal uren zitten rommelen met mijn zoek script ( [url]http://www.sjoukito.com/search.php[/url] ) maar ik kom er helaas niet uit.\r\n\r\nHet grootste probleem is hoe koppel ik de functie \"LIKE\" aan de tekst in de verschillende velden en zorg ik er voor dat lege velden genegeerd worden. En hoe zorg ik dat de uiteindelijke resultaten worden getoond op op een andere pagina namelijk de galerie pagina ( [url]http://www.sjoukito.com/galerie2.php[/url] ).\r\n\r\nIn de bijlage heb ik een txt bestand met wat ik tot nog toe heb.\r\nKan iemand me uitgebreid uitleggen wat ik nog moet doen en vooral hoe om dit allemaal goed samen te laten werken?
Link naar reactie
Misschien heb je hier iets aan ter inspiratie:\n\n[php]// maak query\n $searchstring = mysql_real_escape_string($_GET[\'q\']);\n $searchstring = str_replace(\" \",\"%\",$searchstring);\n $searchstring = str_replace(\"+\",\"%\",$searchstring);\n $searchstring = str_replace(\"*\",\"%\",$searchstring);\n $searchstring = \"%\".$searchstring.\"%\";\n $searchstring = str_replace(\"%%\",\"%\",$searchstring);\n \n $searchfulltext = mysql_real_escape_string($_GET[\'fulltext\']);\n $searchfulltext = str_replace(\" \",\"%\",$searchfulltext);\n $searchfulltext = str_replace(\"+\",\"%\",$searchfulltext);\n $searchfulltext = str_replace(\"*\",\"%\",$searchfulltext);\n $searchfulltext = \"%\".$searchfulltext.\"%\";\n $searchfulltext = str_replace(\"%%\",\"%\",$searchfulltext);\n \n $searchauthor = mysql_real_escape_string($_GET[\'author\']);\n $searchauthor = str_replace(\" \",\"%\",$searchauthor);\n $searchauthor = str_replace(\"+\",\"%\",$searchauthor);\n $searchauthor = str_replace(\"*\",\"%\",$searchauthor);\n $searchauthor = \"%\".$searchauthor.\"%\";\n $searchauthor = str_replace(\"%%\",\"%\",$searchauthor); \n\n if (is_numeric($_GET[\'edition\'])) $searchedition = \'%\'.$_GET[\'edition\'];\n if (is_numeric($_GET[\'year\'])) $searchyear = \'%\'.$_GET[\'year\'];\n \n $searchclause = \"(\";\n $searchclause = $searchclause.\"`title` LIKE CONVERT( _utf8 \'\".$searchstring.\"\' USING latin1 ) COLLATE latin1_swedish_ci\";\n $searchclause = $searchclause.\" AND \";\n $searchclause = $searchclause.\"`content` LIKE CONVERT( _utf8 \'\".$searchfulltext.\"\' USING latin1 ) COLLATE latin1_swedish_ci\";\n $searchclause = $searchclause.\" AND \";\n $searchclause = $searchclause.\"`author` LIKE CONVERT( _utf8 \'\".$searchauthor.\"\' USING latin1 ) COLLATE latin1_swedish_ci\";\n if (is_numeric($_GET[\'edition\'])) $searchclause = $searchclause.\" AND \";\n if (is_numeric($_GET[\'edition\'])) $searchclause = $searchclause.\"`edition` LIKE CONVERT( _utf8 \'\".$searchedition.\"\' USING latin1 ) COLLATE latin1_swedish_ci\";\n if (is_numeric($_GET[\'year\'])) $searchclause = $searchclause.\" AND \";\n if (is_numeric($_GET[\'year\'])) $searchclause = $searchclause.\"`year` LIKE CONVERT( _utf8 \'\".$searchyear.\"\' USING latin1 ) COLLATE latin1_swedish_ci\";\n $searchclause = $searchclause.\")\";[/php]
Link naar reactie
Vooruit, een beetje dan ;)\n\nAllereerst zie je drie keer hetzelfde voor drie verschillende velden: q, fulltext en author. Hier voeg ik %-tekens toe aan beide zijden van de in de velden ingevulde zoekstring. Daarnaast vervang ik spaties, plustekens en asterisken door nog meer %-tekens. Tot slot vervang ik dubbele %-tekens door enkele %-tekens.\nDat alles sla ik op in drie nieuwe variabelen. Een stukje voorbewerking dus.\n\nHet laatste stuk bouwt (een gedeelte) van het daadwerkelijke SQL statement op. Daarbij moet je weten als je doet [I]`veld` LIKE \'%%\'[/I] dat dan alle rijen geselecteerd worden. Je hoeft dus niks speciaals te doen voor het geval een veld leeggelaten wordt, gewoon alleen %-tekens toevoegen en het gaat goed.\n\nDe velden edition en year in mijn geval zijn ...ehhh... en speciaal geval. Hier heb ik gezegd dat ze alleen moeten worden meegenomen als de velden numeriek zijn. Afhankelijk daarvan wordt er wel of niets toegevoegd aan het SQL statement.\n\nEn ja, in plaats van [I]$searchclause = $searchclause.[/I] had ik ook [I]$searchclause .= [/I], maar geen commentaar daarover graag ;)
Link naar reactie
ok in grove lijnen snap ik het.\r\n\r\nAls eerste bewerkt je dus de ingevoerde data door er bepaalde tekens uit te halen wat je per tekst veld (dus zoek mogelijkheid) doet? Ik neem aan dat dat voor een lijst/menu (zoals ik hier [url]http://www.sjoukito.com/search.php[/url] ) veel heb niet hoeft?\r\n\r\nmaar dan het volgende gedeelte, wat is dan de functie van dit stukje script?\r\n\r\n[PHP]$searchauthor = \"%\".$searchauthor.\"%\";[/PHP]\r\n\r\nok dat is even genoeg voor het moment :-p
Link naar reactie
  • 3 weken later...

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...