MySQL FULL TEXT SEARCH
Goeiedag || avond,
Ik heb de volgende sql:
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:
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!
Ik heb de volgende sql:
Code (php)
1
2
3
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))."')";
?>
$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)
1
2
3
4
5
6
7
8
9
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;
}
?>
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!
Gesponsorde koppelingen:
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:
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')";
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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);
}
?>
$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')";
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
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
EDIT: Oops zie nu net dat ik bump :s
Heb nu dit zo:
Maar er komt nu helemaal niks! Geen error maar ook geen tekst!
Heb nu dit zo:
Code (php)
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
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));
}
?>
$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
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.
Als er geen resultaten zijn geeft mysql_fetch_array een warning... Dus eerst checken met myql_num_rows()
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.)
if($res === false) {
kan geschreven worden als:
if(!$res){
(En dat is geen persoonlijke keuze, maar raadt de handleiding van php.net aan.)
Ik krijg geen resultaten. Heb hem ff door phpMyAdmin gegooid, waar zou dit aan kunnen liggen?
Dat is hoe mijn db er uit ziet.
En klopt deze code wel?
Want ik begin het idee te krijgen dat full text search geen lege kolommen mag bevatten, ivm met z'n reken methodes.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 ;
`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?
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
Als ik het goed begrijp heeft niemand hier verder ervaring mee dus?
Bumpiditybump!
Kom op iemand?!
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
knop om je tekst aan te passen.
SanThe.
knop om je tekst aan te passen.SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Danny Appeldoorn
Je zegt: "heb 'm effe door phpmyadmin gegooid" . Doel je dan op je query. Zoja, post eens een (mogelijke) query.
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.
Gewijzigd op 01/01/1970 01:00:00 door M Ypma



