SQL query lukt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim

tim

24/03/2009 15:17:00
Quote Anchor link
Ik heb het volgende probleem: Ik heb een database opdrachten die de rijen naam, beschrijving, rubriek, rubriek2 hebben. Bij de uitgebreid zoeken functie heb ik nu deze php/sql code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if($_GET['pht'] == 'on') {
    $afb = 'AND opdrachten.afbeeldingurl1!="" ';
} else {
    $afb = '';
}

$rubr = !isset($_GET['rubriek']) ? '': 'AND opdrachten.rubriek="'.anti_sql($_GET['rubriek']).'" AND opdrachten.rubriek2="'.anti_sql($_GET['rubriek']).'" ';

$results = mysql_query('SELECT * FROM `opdrachten` WHERE MATCH (naam, beschrijving) AGAINST ("'.anti_sql($_GET['q']).'") '.$afb.' '.$rubr.');


Het probleem is dat het niet lukt om een rij te selecteren waar rubriek Of rubriek2 gelijk zijn aan de ingevulde rubriek..

Als er nog vragen zijn hoor ik het wel.

Tim
 
PHP hulp

PHP hulp

23/12/2024 21:22:32
 
Jurgen assaasas

Jurgen assaasas

24/03/2009 15:27:00
Quote Anchor link
MATCH is voor full text search je kunt gewoon

SELECT veld FROM table WHERE veld=veld2;
 
Tim

tim

24/03/2009 15:41:00
Quote Anchor link
Die match is ook nodig voor mijn search (het is een searchpagina)

Edit: Om het wat duidelijker te maken, ik bedoel dus dat ik een search maak, en hij mag alleen rijen laten zien waarin de opgegeven rubriek in voor komt
Gewijzigd op 01/01/1970 01:00:00 door tim
 
Tim

tim

25/03/2009 15:33:00
Quote Anchor link
BUMP

Sorry voor de bump, maar het lukt me maar niet, iemand misschien een oplossing?
 
Jesper Diovo

Jesper Diovo

25/03/2009 15:35:00
Quote Anchor link
Echo je query eens nadat je de variabelen er in hebt gezet. Overigens, wat is je fout? Gebruik een goede manier van foutafhandeling!
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Tim

tim

25/03/2009 15:42:00
Quote Anchor link
Wat ik krijg als ik de sql echo is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT opdrachten.id, opdrachten.naam, opdrachten.afbeeldingurl1, opdrachten.beschrijving, opdrachtgever.postcode, opdrachtgever.woonplaats, opdrachtgever.land FROM `opdrachten` JOIN `opdrachtgever` ON opdrachten.email=opdrachtgever.email WHERE MATCH (naam, beschrijving) AGAINST ("dakraam") AND opdrachten.rubriek="rubriek1" OR opdrachten.rubriek2="rubriek1" ORDER BY opdrachten.id DESC


Mijn probleem is niet dat er een fout in zit, maar dat ik niet kan zoeken in rubriek en rubriek2. Hij moet daar allebij in zoeken, alleen daar gaat het fout.

EDIT: Opgelost ;) ik weet niet hoe ik heb het gedaan, maar de bovenstaande code is gewoon ineens goed :S
Gewijzigd op 01/01/1970 01:00:00 door tim
 
Jesper Diovo

Jesper Diovo

25/03/2009 15:45:00
Quote Anchor link
Plaats 'm nu eens?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Tim

tim

25/03/2009 15:49:00
Quote Anchor link
Wat moet ik plaatsen?

B.t.w: hij werkt niet want hij doet niets met de zoekresultaten..
 

25/03/2009 15:51:00
Quote Anchor link
Glazen bol is ter reparatie naar India gebracht, sorry ;-)
 
Tim

tim

25/03/2009 15:58:00
Quote Anchor link
Das niet zo fijn :)
De query die hij parst is als volgd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT opdrachten.id, opdrachten.naam, opdrachten.afbeeldingurl1, opdrachten.beschrijving, opdrachtgever.postcode, opdrachtgever.woonplaats, opdrachtgever.land FROM `opdrachten` JOIN `opdrachtgever` ON opdrachten.email=opdrachtgever.email WHERE MATCH (naam, beschrijving) AGAINST ("dakraam") AND opdrachten.rubriek="rubriek1" OR opdrachten.rubriek2="rubriek1" ORDER BY opdrachten.id ASC


De query die hij werkelijk uitvoert is zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT opdrachten.id, opdrachten.naam, opdrachten.afbeeldingurl1, opdrachten.beschrijving, opdrachtgever.postcode, opdrachtgever.woonplaats, opdrachtgever.land
FROM `opdrachten`
JOIN `opdrachtgever` ON opdrachten.email = opdrachtgever.email
WHERE MATCH (
naam, beschrijving
)
AGAINST (
"dakraam"
)


Ik snap dat hij
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
AND opdrachten.rubriek="rubriek1" OR opdrachten.rubriek2="rubriek1" ORDER BY opdrachten.id ASC

Afkapt omdat het niet klopt, maar hoe zorg ik nou dat ik En kan zoeken, En kan kijken of rubriek1 in het veld rubriek of rubriek2 zit?
 
Martijn B

Martijn B

25/03/2009 16:53:00
Quote Anchor link
Moet je onderste query stukje niet zo?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
AND ( opdrachten.rubriek='rubriek1'
OR opdrachten.rubriek2='rubriek1' )
ORDER BY opdrachten.id ASC


Voor de zekerheid ook maar even haakjes toegevoegd.

Op de kolommen "naam en "beschrijving" heb je dus een fulltext sleutel ? Er van uitgaande dat je MySQL gebruikt.

Edit:
Volgens mij hoef je voor deze query ook niet gebruik te maken van fulltext.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Tim

tim

25/03/2009 17:01:00
Quote Anchor link
Het is wel een zoekpagina, er zitten inderdaad fulltext sleutel op. Helaas werkt hij niet. Misschien is like een oplossing, weet iemand daar de goede query voor?

(Het erachter plakken van martijns query werkt niet want hij breekt het af :S)
 
Jesper Diovo

Jesper Diovo

25/03/2009 19:16: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
SELECT
  opdrachten.id,
  opdrachten.naam,
  opdrachten.afbeeldingurl1,
  opdrachten.beschrijving,
  opdrachtgever.postcode,
  opdrachtgever.woonplaats,
  opdrachtgever.land
FROM
  opdrachten,
  opdrachtgever
WHERE
  opdrachten.email = opdrachtgever.email
  AND
  MATCH (naam, beschrijving) AGAINST ("dakraam")
  AND
  (opdrachten.rubriek = "rubriek1"
   OR
   opdrachten.rubriek2 = "rubriek1"
  )
ORDER BY
  opdrachten.id ASC


Werkt die ook niet?
 



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.