SQL query lukt niet
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:
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
Code (php)
1
2
3
4
5
6
7
8
9
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.');
$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
Gesponsorde koppelingen:
MATCH is voor full text search je kunt gewoon
SELECT veld FROM table WHERE veld=veld2;
SELECT veld FROM table WHERE veld=veld2;
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
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
BUMP
Sorry voor de bump, maar het lukt me maar niet, iemand misschien een oplossing?
Sorry voor de bump, maar het lukt me maar niet, iemand misschien een oplossing?
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
Wat ik krijg als ik de sql echo is dit:
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
Code (php)
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
Plaats 'm nu eens?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Wat moet ik plaatsen?
B.t.w: hij werkt niet want hij doet niets met de zoekresultaten..
B.t.w: hij werkt niet want hij doet niets met de zoekresultaten..
Glazen bol is ter reparatie naar India gebracht, sorry ;-)
Das niet zo fijn :)
De query die hij parst is als volgd:
De query die hij werkelijk uitvoert is zo:
Ik snap dat hij
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?
De query die hij parst is als volgd:
Code (php)
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)
1
2
3
4
5
6
7
8
9
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"
)
FROM `opdrachten`
JOIN `opdrachtgever` ON opdrachten.email = opdrachtgever.email
WHERE MATCH (
naam, beschrijving
)
AGAINST (
"dakraam"
)
Ik snap dat hij
Code (php)
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?
Moet je onderste query stukje niet zo?
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.
Code (php)
1
2
3
2
3
AND ( opdrachten.rubriek='rubriek1'
OR opdrachten.rubriek2='rubriek1' )
ORDER BY opdrachten.id ASC
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
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)
(Het erachter plakken van martijns query werkt niet want hij breekt het af :S)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
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?



