2 tabbellen zoeken
Code (php)
1
$data = mysql_query(" SELECT * FROM iets1, iets2 WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");
wat doe ik fout?
iets1
- menu
- kleur
iest2
- subject
- message
- kleur
- menu
daar moet hij in zoeken zeg maar.
En zoeken in die 2 tabellen zul je anders met 2 query's moeten doen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT
*
FROM
iets1, iets2
WHERE
MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)
*
FROM
iets1, iets2
WHERE
MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)
De kolommen subject, message, kleur en menu MOETEN in 1 tabel staan, je kunt in MySQL geen fulltext search doen op data in meerdere tabellen. De index die je nodig hebt, fulltext index, kan namelijk alleen maar op 1 tabel worden aangemaakt.
Wanneer jij een fulltext search wilt uitvoeren op 2 tabellen, zul je dus gewoon een JOIN moeten gebruiken en 2x de MATCH-AGAINST in je WHERE moeten opnemen, één voor iedere fulltext index.
en let erop dat je tabel op MyIsam moet staan. InnoDB kent geen full-text search
Terence schreef op 22.01.2009 10:45:
Daar krijg je bij mijn weten wel een foutmelding op, je kunt in MySQL alleen een fulltext search uitvoeren wanneer er ook een fulltext index aanwezig is. En die kun je in innoDB niet aanmaken.en let erop dat je tabel op MyIsam moet staan. InnoDB kent geen full-text search
Gelukkig kent PostgreSQL deze beperkingen niet, kun je een fulltext search doen op ieder veld en zonder dat er een index is aangemaakt. Voor de performance kan een index wel handig zijn. Geef dan wel even de juiste taal op, je kunt per taal (of zelfs vaktaal) een eigen index aanmaken.
Code (php)
1
$data = mysql_query(" SELECT * FROM iets1 WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE) INNER JOIN (iets2 WHERE MATCH(kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");
zo iets? maar krijg ik een fout melding
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /customers/blabla.nl/blabla.nl/httpd.www/aj/zoeken.php on line 319
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/blabla.nl/blabla.nl/httpd.www/aj/zoeken.php on line 356
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
Code (php)
1
<?php (SELECT tabel1.id,tabel2.id,tabel2.nogiets FROM tabel1,tabel2 WHERE tabel1.id = "$1" AND tabel2.id = "$3") ?>
Gewijzigd op 01/01/1970 01:00:00 door Lennart
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST (...)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST (...)
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST (...)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST (...)
Is dat geen idee? [Ik heb absoluut geen ervaring met MATCH() AGAINST(), maar in normale omstandigheden denk ik dat dit zou moeten werken.
Kortom, zorg eerst dat je met een goed genormaliseerd datamodel aan de slag gaat. Dan wordt het zoeken in deze gegevens waarschijnlijk een stuk eenvoudiger...
Wanneer je een JOIN nodig hebt, maak dan een JOIN. Wanneer je de resultaten van 2 queries wilt samenvoegen tot 1 resultaat, gebruik dan UNION.
En vergeet vooral niet om aliassen te gebruiken. 2x een kolom met de naam "id" levert weer fraaie bugs op in je PHP-code, wat mag $row['id'] voorstellen? id of id?
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
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
<?php
$data = mysql_query("
SELECT
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST ('".$find."' IN BOOLEAN MODE)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST ('".$find."' IN BOOLEAN MODE)");
while($result = mysql_fetch_assoc($data)) {
echo'
blablabla
';
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
?>
$data = mysql_query("
SELECT
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST ('".$find."' IN BOOLEAN MODE)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST ('".$find."' IN BOOLEAN MODE)");
while($result = mysql_fetch_assoc($data)) {
echo'
blablabla
';
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
?>
heb ik nu maar krijg deze error:
Code (php)
1
2
3
2
3
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/blabla.nl/blabla.nl/httpd.www/aj/zoeken.php on line 326
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/blabla.nl/blabla.nl/httpd.www/aj/zoeken.php on line 364
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/blabla.nl/blabla.nl/httpd.www/aj/zoeken.php on line 364
Gewijzigd op 01/01/1970 01:00:00 door Arco
Jezpur schreef op 25.01.2009 13:39:
Ja, als je even na had gedacht en die foutmelding had gelezen had je geweten dat dat een doodnormale PHP foutmelding is. Geen SQL. Je gebruikt duidelijk geen goede foutafhandeling:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
hmmz... ga ik ook ff wat mee proberen maar het script werkt al als ik 1 tabel doe. dan is de output: Er zijn geen resultaten
dus ik wil wel ff kijken wat ik hiermee kan.
sorry voor het Bumpen
Gewijzigd op 01/01/1970 01:00:00 door Arco
Arco schreef op 25.01.2009 19:39:
hmmz... ga ik ook ff wat mee proberen maar het script werkt al als ik 1 tabel doe. dan is de output: Er zijn geen resultaten
dus ik wil wel ff kijken wat ik hiermee kan.
sorry voor het Bumpen
Jezpur schreef op 25.01.2009 13:39:
Ja, als je even na had gedacht en die foutmelding had gelezen had je geweten dat dat een doodnormale PHP foutmelding is. Geen SQL. Je gebruikt duidelijk geen goede foutafhandeling:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
$query = "SELECT...";
$result = mysql_query($query);
if($result) {
if(mysql_num_rows($result) > 0) {
while($rij = mysql_fetch_assoc($result)) {
// doe wat je wilt
}
} else {
echo 'Geen records gevonden.';
}
} else {
echo mysql_error().' in query: '.$query;
}
?>
hmmz... ga ik ook ff wat mee proberen maar het script werkt al als ik 1 tabel doe. dan is de output: Er zijn geen resultaten
dus ik wil wel ff kijken wat ik hiermee kan.
sorry voor het Bumpen
Nee je moet niet kijken of je er wat mee kan, je moet er wat mee doen! Je gebruikt nog steeds geen foutafhandeling omdat je PHP errors krijgt, die niets maar dan ook niets met SQL of je query te maken hebben. Ga die foutafhandeling inbouwen en vertel hier wat mysql_error() jou te vertellen had.
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
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
<?php
$data = mysql_query("
SELECT
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST ('".$find."' IN BOOLEAN MODE)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST ('".$find."' IN BOOLEAN MODE)");
while($result = mysql_fetch_assoc($data)) {
echo'
uitkomst als het in de db is gevonden.
';
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo '
Er zijn geen resultaten
';
}
?>
$data = mysql_query("
SELECT
tabel1.id,
tabel2.id
FROM
tabel1, tabel2.
WHERE
MATCH(tabel1.subject, tabel1.message, tabel1.kleur, tabel1.menu) AGAINST ('".$find."' IN BOOLEAN MODE)
OR
MATCH (tabel2.menu, tabel2.kleur) AGAINST ('".$find."' IN BOOLEAN MODE)");
while($result = mysql_fetch_assoc($data)) {
echo'
uitkomst als het in de db is gevonden.
';
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo '
Er zijn geen resultaten
';
}
?>
is dit niet goed dan?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Zoekresultaten:
u heeft gezocht naar: zwart
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 326
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 364
Er zijn geen resultaten
u heeft gezocht naar: zwart
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 326
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 364
Er zijn geen resultaten
maar de kleur zwart bestaat wel.
als ik iets invul wat niet bestaat dan zegt hij hetzelfde als hierboven.
Gewijzigd op 01/01/1970 01:00:00 door Arco
Quote:
Zoekresultaten:
u heeft gezocht naar: zwart
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 326
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 364
Er zijn geen resultaten
u heeft gezocht naar: zwart
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 326
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 364
Er zijn geen resultaten
En let dan vooral op de foutmelding:
Quote:
Je doet blijkbaar niets aan foutafhandeling, anders had je nooit deze foutmelding op je scherm gekregen. Er is in de voorgaande regels, bij het uitvoeren van de query, iets goed fout gegaan. Dat controleer je niet en dus gaan er verderop in je code weer andere dingen fout.Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /customers/onsureterp.nl/onsureterp.nl/httpd.www/aj-webdesign/zoeken.php on line 326
Oplossing: foutafhandeling inbouwen. Dat is de basis van je script, deze ontbreekt nog.
Code (php)
1
2
3
4
2
3
4
<?php
$data = mysql_query("SELECT * FROM ajtemplates WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");
?>
$data = mysql_query("SELECT * FROM ajtemplates WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");
?>
dat werkt hij wel
en zo veel verstand heb ik ook al niet van php.
Gewijzigd op 01/01/1970 01:00:00 door Arco
Er is nu al n paar keefr aangegeven dat je iets met foutafhandeling moet gaan doen. Er wordt gedoeld op mysql_error of. Zoek even op sql beginnershandleiding daar staat precies in wat j moet doen. Het had je veel tijd gscheeld als je dat meteen gedaan had
ok. ik ga daar zeker wat mee doen maar ik snap dan zelf niet waarom dan bij die ene query wel werkt en bij die andere niet.