hallo, ik heb een vraag. hoe kan ik een SQL maken zodat hij uit 2 tabellen zoekt.


$data = mysql_query(" SELECT * FROM iets1, iets2 WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");


wat doe ik fout?
heb gisteravond nog wat geprutst maar helaas lukt me niet.

iets1
- menu
- kleur

iest2
- subject
- message
- kleur
- menu

daar moet hij in zoeken zeg maar.
@Arco
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.


http://www.phphulp.nl/php/tutorials/3/479/
Kan je iets duidelijker zijn waar die 2 tabellen voor staan? Als ze (ongeveer) dezelfde soort data voorstellen dan kun je het beter in 1 tabel steken. Zie daarvoor tutorials over "normaliseren".

En zoeken in die 2 tabellen zul je anders met 2 query's moeten doen.
De huidige query:

SELECT 
  * 
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
en let erop dat je tabel op MyIsam moet staan. InnoDB kent geen full-text search
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.

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.
ik ben weer even bezig geweest.


$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
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:

<?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;
}
?>
Ik zou het zo doen:
<?php (SELECT tabel1.id,tabel2.id,tabel2.nogiets FROM tabel1,tabel2 WHERE tabel1.id = "$1" AND tabel2.id = "$3") ?>
Dan krijg je alleen maar resultaten als tabel1.id én tabel2.id $1 en $3 zijn. Dat zal waarschijnlijk niet vaak het geval zijn. De TS wil alleen in 2 tabellen de resultaten mengen, zodat het één geheel lijkt.


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 (...)


Is dat geen idee? [Ik heb absoluut geen ervaring met MATCH() AGAINST(), maar in normale omstandigheden denk ik dat dit zou moeten werken.

Reageren