Toon posts:

[sql]Zoek functie vind geen IP adressen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een zoek functie gemaakt die op zich goed werkt, echter 1 rij bestaat alleen uit IP adressen die in het volgende formaat zijn opgeslagen: 192.168.0.1 als fulltext.

De query die ik vervolgens geef om de zoek opdracht te starten is:
code:
1
$result = mysql_query("SELECT * FROM gegevens WHERE MATCH (number,name,serverip) AGAINST ('$search')");


De waarde search wordt elders gedefineerd, maar geef je als test direct het IP in in de query vind ie ook niets.
Het vreemde hieraan is dat de zoek functie perfect werkt alleen vind ie absoluut GEEN ip adressen, verander ik als test 1 IP adres in een naam wat in de rij staat en geef dan een zoek opdracht op die naam vind ie de naam wel.
Geef ik het IP adres als test in in de rij "name" vind ie hem ook niet.

Hieruit kan ik dus concluderen dat de query EN zoekfunctie werkt maar dat ie alleen geen IP adressen vind die in de database staan. Ik heb dit al op 2 verschillende databases geprobeert (beide zelfde resultaat), 1 keer lokaal en 1 keer op een webserver.

Mijn vraag is nu dus:
Wat doe ik verkeerd, waarom vind ie geen nu IP adressen, dit zou toch normaal gesproken moeten werken of is er iets met de inhoud waardoor hij niks vind?

[ Voor 7% gewijzigd door Verwijderd op 07-04-2004 04:10 ]


Verwijderd

Uhhhmmm de puntjes in ip data misschien
als ik het goed onthouden heb wordt de ip data dan niet als 1 string gezien.

Verwijderd

ff gegoogled en dit gevonden :

13.6.3 Full-text Restrictions
Full-text searches are supported for MyISAM tables only.
As of MySQL 4.1.1, full-text searches can be used with most multi-byte character sets. The exception is that for Unicode, the utf8 character set can be used, but not the ucs2 character set.
As of MySQL 4.1, the use of multiple character sets within a single table is supported. However, all columns in a FULLTEXT index must have the same character set and collation.
The MATCH() column list must exactly match the column list in some FULLTEXT index definition for the table, unless this MATCH() is IN BOOLEAN MODE.
The argument to AGAINST() must be a constant string.


veel plezier

[ Voor 38% gewijzigd door Verwijderd op 07-04-2004 04:55 ]


Verwijderd

Topicstarter
Snap jij wat er staat?
Ik niet dus, lijkt wel chinees :(

Verwijderd

de laatste regel zegt als je AGAINST() gebruikt MOET de string constant zijn.
omdat er puntjes in jouw string zitten wordt dit gezien als een string die uit meerdere delen bestaat.


kijk hier ff wat mySQL doet is tevens handige site met info over mySQL

http://www.mysql.com/doc/en/Identifier_qualifiers.html

Verwijderd

ben nog net geen mySQL guru maar probeer dit eens :
code:
1
$result = mysql_query("SELECT * FROM gegevens WHERE MATCH (number,name,'serverip') AGAINST ('$search')");


let op 'serverip'

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:00

gorgi_19

Kruimeltjes zijn weer op :9

Waarom sla je IP-adressen op als een tekst en niet als nummer (Long)?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
@gorgo_19
Omdat die zoekfunctie alleen werkt op rijen die als teksten zijn ingesteld.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:00

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 07 april 2004 @ 13:43:
@gorgo_19
Omdat die zoekfunctie alleen werkt op rijen die als teksten zijn ingesteld.
Dat snap ik, waar daarbij gekoppeld zit natuurlijk ook een andere query. Als je alleen maar IP-addressen op deze manier opslaat, kan je hem imho ook als long opslaan en met een simpele WHERE aan de gang.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Natuurlijk wordt er veel meer gedaan met die rijen, alleen de zoek functie is wel handig om te hebben. Ik wil dat graag werkend hebben.
Met "fulltext" werkt de db gewoon goed, eerlijk gezegd ik merk totaal geen verschil nu de rijen teksten zijn.

Verwijderd

Topicstarter
Verwijderd schreef op 07 april 2004 @ 04:58:
ben nog net geen mySQL guru maar probeer dit eens :
code:
1
$result = mysql_query("SELECT * FROM gegevens WHERE MATCH (number,name,'serverip') AGAINST ('$search')");


let op 'serverip'
Dit geeft een sql error.

Misschien iemand een andere manier weet hoe ik kan zoeken in die rij?

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 08:59

ripexx

bibs

De enige manier om dit zoeken goed te doen is dmv een long. MySQL neemt de '.' niet mee in de full text, daardoor zoek je op '192' '168' '0' '1' wat niet tot resultaten zal leiden.

buit is binnen sukkel

Pagina: 1