2 tabbellen zoeken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Arco

Arco

21/01/2009 12:27:00
Quote Anchor link
hallo, ik heb een vraag. hoe kan ik een SQL maken zodat hij uit 2 tabellen zoekt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$data = mysql_query(" SELECT * FROM iets1, iets2 WHERE MATCH(subject, message, kleur, menu) AGAINST('".$find."' IN BOOLEAN MODE)");


wat doe ik fout?
 
PHP hulp

PHP hulp

21/11/2024 22:20:25
 
Arco

Arco

22/01/2009 08:30:00
Quote Anchor link
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.
 
Robert Deiman

Robert Deiman

22/01/2009 09:30:00
Quote Anchor link
@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 Afbeelding knop om je tekst aan te passen.


http://www.phphulp.nl/php/tutorials/3/479/
 
Hipska BE

Hipska BE

22/01/2009 09:31:00
Quote Anchor link
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.
 
Frank -

Frank -

22/01/2009 09:47:00
Quote Anchor link
De huidige query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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.
 
Terence Hersbach

Terence Hersbach

22/01/2009 10:45:00
Quote Anchor link
en let erop dat je tabel op MyIsam moet staan. InnoDB kent geen full-text search
 
Frank -

Frank -

22/01/2009 10:50:00
Quote Anchor link
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.
 
Arco

Arco

25/01/2009 13:33:00
Quote Anchor link
ik ben weer even bezig geweest.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Jesper Diovo

Jesper Diovo

25/01/2009 13:39:00
Quote Anchor link
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)
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
<?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;
}

?>
 
Lennart

Lennart

25/01/2009 14:03:00
Quote Anchor link
Ik zou het zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Jesper Diovo

Jesper Diovo

25/01/2009 14:08:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 (...)


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

Joren de Wit

25/01/2009 14:13:00
Quote Anchor link
Niet om het een of ander, maar waarom heb je in twee verschillende tabellen dezelfde kolommen menu en kleur? Het lijkt mij dat er eerder iets niet klopt aan je datamodel waardoor het nu heel lastig wordt om naar de juiste resultaten te zoeken.

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...
 
Frank -

Frank -

25/01/2009 14:18:00
Quote Anchor link
De query van Jezpur kan hele bijzonder resultaten opleveren, er zit geen enkel verband in de data. Gevolg: een berg ellende waar je nog steeds niets mee kunt.

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?
 
Arco

Arco

25/01/2009 18:32:00
Quote Anchor link
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
<?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)
{


?>




heb ik nu maar krijg deze error:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 01/01/1970 01:00:00 door Arco
 
Arco

Arco

25/01/2009 19:39:00
Quote Anchor link
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)
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
<?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;
}

?>


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
 
Jesper Diovo

Jesper Diovo

25/01/2009 19:42:00
Quote Anchor link
Arco schreef op 25.01.2009 19:39:
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)
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
<?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;
}

?>


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.
 
Arco

Arco

25/01/2009 20:04:00
Quote Anchor link
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
<?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
'
;
}

?>


is dit niet goed dan?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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
 
Frank -

Frank -

25/01/2009 20:14:00
Quote Anchor link
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

En let dan vooral op de foutmelding:
Quote:
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
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.

Oplossing: foutafhandeling inbouwen. Dat is de basis van je script, deze ontbreekt nog.
 
Arco

Arco

25/01/2009 20:18:00
Quote Anchor link
hmm oke. maar als ik deze query doe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$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
 
Klaasjan Boven

Klaasjan Boven

25/01/2009 20:31:00
Quote Anchor link
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
 
Arco

Arco

25/01/2009 20:34:00
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.