Versio

MySQL FULL TEXT SEARCH

Overzicht Reageren

Danny Appeldoorn

Danny Appeldoorn

04/07/2009 17:58:00
Quote Anchor link
Goeiedag || avond,

Ik heb de volgende sql:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$sql
= "SELECT id,name, madeby,date,p1,p2,p3,p4,p5,p6,p7 FROM tutorials  MATCH(name, madeby,p1,p1t,p2,p2t,p3,p3t,p4,p4t,p5,p5t,p6,p6t,p7,p7t) AGAINST('".mysql_real_escape_string($this->init->convertsearchstring($q))."')";
?>


Als ik deze uitvoer en er een fetch overheen gooi krijg ik de volgende fout (dus dat er niks gevonden is..):
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in mijn script pad :p

De functie convertsearchstring(); is dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
function convertsearchstring($string){
        $string = preg_replace("#(\w*) $#","{1}+",$string);
        $string = str_replace(" ","",$string);
        $string = str_replace("+"," +",$string);
        $string = "+".$string;
        return $string;
    }

?>


Iemand enig idee waar de fout kan zitten? En zelfs als ik deze bovenstaande functie niet uitvoer krijg ik toch de foutmelding.

Ik hoop dat iemand kan helpen, aangezien dit de eerste keer is dat ik full text search gebruik. Ik heb een index aangemaakt in mn database met phpmyadmin..

Op de volgende velden:

name
madeby
p1
p1t
p2
p2t
p3
p3t
p4
p4t
p5
p5t
p6
p6t
p7
p7t

Alvast bedankt!
 
PHP hulp

PHP hulp

25/05/2012 06:38:24
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Afra ca

Afra ca

04/07/2009 18:54:00
Quote Anchor link
Misschien vreemde vraag hoor, maar je zegt dat het bij het fetchen fout gaat. Maar wie weet word de query niet goed uitgevoerd. Zorg voor een juiste foutafhandeling, zodat je het probleem kan isoleren. Gebruik een opbouw ongeveer gelijk aan dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$query
= "Je query";

if(!$result = mysql_query($query)){
    trigger_error(mysql_error());
}

else{
    $fetch = mysql_fetch_assoc($result);
}

?>


Dan kan je erachter komen of het misschien aan je query ligt en je niet een niet bestaand iets loopt te fetchen, wat natuurlijk niet zo soepel loopt. Anders moet je even gaan kijken of het ligt aan je functie. Dit kan je natuurlijk doen door gewoon even je vars te vervangen door een tijdelijk standaard ingevuld iets. Dus even hardcoden. (in je code $query = SELECT blabla MATCH (iets) AGAINST ('iets')";
 
Danny Appeldoorn

Danny Appeldoorn

04/07/2009 19:19:00
Quote Anchor link
Oke,

Zal het even proberen.

Nu dit:

Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH(name, madeby,p1,p1t,p2,p2t,p3,p3t,p4,p4t,p5,p5t,p6,p6t,p7,p7t) AGAINST('as' at line 1 in
Gewijzigd op 01/01/1970 01:00:00 door Danny Appeldoorn
 
Danny Appeldoorn

Danny Appeldoorn

04/07/2009 22:01:00
Quote Anchor link
EDIT: Oops zie nu net dat ik bump :s

Heb nu dit zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?
$match
= mysql_real_escape_string($this->init->convertsearchstring($q));
            $sql = sprintf("SELECT
            id,
            name,
            madeby,
            date,
            p1,
            p2,
            p3,
            p4,
            p5,
            p6,
            p7
            FROM
            tutorials
            WHERE
            MATCH(
                  name,
                  madeby,
                  p1,
                  p2,
                  p3,
                  p4,
                  p5,
                  p6,
                  p7)
            AGAINST('%s')"
,$match);
            
            $res = mysql_query($sql,$con);
            if ($res === false){
                echo "Fout in selectie!";
            }

            else
            {
                print_r(mysql_fetch_array($res));
            }

?>


Maar er komt nu helemaal niks! Geen error maar ook geen tekst!
Gewijzigd op 01/01/1970 01:00:00 door Danny Appeldoorn
 
Roel van de Water
Moderator

Roel van de Water

04/07/2009 22:14:00
Quote Anchor link
Als je niet zeker weet of je query wel klopt voer ik hem altijd eerst uit in phpMyAdmin, dan weet ik in ieder geval of m'n query klopt.
 
Willem Jan Z

Willem Jan Z

04/07/2009 23:04:00
Quote Anchor link
Als er geen resultaten zijn geeft mysql_fetch_array een warning... Dus eerst checken met myql_num_rows()
 
Afra ca

Afra ca

05/07/2009 00:37:00
Quote Anchor link
Kleine opmerking:

if($res === false) {

kan geschreven worden als:

if(!$res){

(En dat is geen persoonlijke keuze, maar raadt de handleiding van php.net aan.)
 
Danny Appeldoorn

Danny Appeldoorn

05/07/2009 08:12:00
Quote Anchor link
Ik krijg geen resultaten. Heb hem ff door phpMyAdmin gegooid, waar zou dit aan kunnen liggen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TABLE `tutorials` (
  `id` tinyint(7) NOT NULL auto_increment,
  `name` varchar(50) collate latin1_german1_ci NOT NULL,
  `madeby` varchar(20) collate latin1_german1_ci NOT NULL,
  `ip` varchar(25) collate latin1_german1_ci NOT NULL,
  `rateid` tinyint(8) NOT NULL,
  `date` datetime NOT NULL,
  `p1` longtext collate latin1_german1_ci NOT NULL,
  `p1t` varchar(20) collate latin1_german1_ci NOT NULL,
  `p2` longtext collate latin1_german1_ci,
  `p2t` varchar(20) collate latin1_german1_ci default NULL,
  `p3` longtext collate latin1_german1_ci,
  `p3t` varchar(20) collate latin1_german1_ci default NULL,
  `p4` longtext collate latin1_german1_ci,
  `p4t` varchar(20) collate latin1_german1_ci default NULL,
  `p5` longtext collate latin1_german1_ci,
  `p5t` varchar(20) collate latin1_german1_ci default NULL,
  `p6` longtext collate latin1_german1_ci,
  `p6t` varchar(20) collate latin1_german1_ci default NULL,
  `p7` longtext collate latin1_german1_ci,
  `p7t` varchar(20) collate latin1_german1_ci default NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `name` (`name`,`madeby`,`p1`,`p2`,`p3`,`p4`,`p5`,`p6`,`p7`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=7 ;



Dat is hoe mijn db er uit ziet.


En klopt deze code wel?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? $p7 = (!$parsed[6]) ? NULL : $parsed[6]; ?>

Want ik begin het idee te krijgen dat full text search geen lege kolommen mag bevatten, ivm met z'n reken methodes.
Gewijzigd op 01/01/1970 01:00:00 door Danny Appeldoorn
 
Danny Appeldoorn

Danny Appeldoorn

05/07/2009 14:19:00
Quote Anchor link
Als ik het goed begrijp heeft niemand hier verder ervaring mee dus?
 
Danny Appeldoorn

Danny Appeldoorn

13/07/2009 22:43:00
Quote Anchor link
Bumpiditybump!
 
Danny Appeldoorn

Danny Appeldoorn

14/07/2009 12:50:00
Quote Anchor link
Kom op iemand?!
 
Danny Appeldoorn

Danny Appeldoorn

14/07/2009 19:38:00
Quote Anchor link
Sorry dat ik bump maar ik heb het antwoord echt hard nodig!

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de http://www.phphulp.nl/imgs/forum/edit.gif knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Danny Appeldoorn
 
Afra ca

Afra ca

14/07/2009 21:07:00
Quote Anchor link
Je zegt: "heb 'm effe door phpmyadmin gegooid" . Doel je dan op je query. Zoja, post eens een (mogelijke) query.
 
Danny Appeldoorn

Danny Appeldoorn

14/07/2009 21:10:00
Quote Anchor link
Ja heb ik gedaan ik heb de bovenstaande query er door gegooid. En dan met against hardcoded (hello) en in mn tabel staat sowieso een rij met hello erin.
 
M Ypma

M Ypma

14/07/2009 23:24:00
Quote Anchor link
en welke storage engine word er gebruikt in je mysql? nevermind, zie het in je sql staan
Gewijzigd op 01/01/1970 01:00:00 door M Ypma
 



Overzicht Reageren