foutje in querry
Kan iemand mij zeggen wat er fout is aan mijn query AUB.
Ben ten einde raad.
Als ik de query run in een localhost omgeving direkt in phpmyadmin is er niks fout.
Als ik de query aanspreek via een functie (zie hieronder Krijg ik de volgende fout :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
SELECT count(*) FROM gelezen WHERE user_id = 'DPC5900')
Beschrijving functie :
Occurs before SQL query executed
Use this event if you like to modify default SQL query on the page.
Avoid editing strSQL parameter, modify strWhereClause and strOrderBy instead.
Parameters
$strSQL - SQL query being to be executed.
$strWhereClause - WHERE clause applied to the SQL query. Example: "active=1"
$strOrderBy - ORDER BY query applied to the SQL query.Example: "ORDER BY
LastName,FirstName"
$pageObject - an object of Page class representing the current page
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
32
33
34
35
36
37
38
39
40
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
32
33
34
35
36
37
38
39
40
<?php
function BeforeQueryList($strSQL, $strWhereClause, $strOrderBy, $pageObject)
{
$sleutel = $_SESSION["UserID"] ;
//********** Check if specific record exists ************
global $conn;
$strSQLExists = "select * from gebruikers where PersUserID='$sleutel'";
$rsExists = db_query($strSQLExists,$conn);
$data=db_fetch_array($rsExists);
if($data)
{
$gb_ID = $data['ID'];
$strSQL = "SELECT
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
where ID NOT IN (SELECT news_id FROM gelezen WHERE user_id = '$sleutel')";
}
else
{
// if dont exist do something else
}
}
?>
function BeforeQueryList($strSQL, $strWhereClause, $strOrderBy, $pageObject)
{
$sleutel = $_SESSION["UserID"] ;
//********** Check if specific record exists ************
global $conn;
$strSQLExists = "select * from gebruikers where PersUserID='$sleutel'";
$rsExists = db_query($strSQLExists,$conn);
$data=db_fetch_array($rsExists);
if($data)
{
$gb_ID = $data['ID'];
$strSQL = "SELECT
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
where ID NOT IN (SELECT news_id FROM gelezen WHERE user_id = '$sleutel')";
}
else
{
// if dont exist do something else
}
}
?>
Dank bij voorbaat
Dirk
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 11/05/2018 17:08:07 door - Ariën -
In alle bovenstaande code komt de COUNT() query waarmee iets misgaat niet voor. Weet je zeker dat je op de goede plaats aan het kijken bent? De foutmelding is volgens mij vrij duidelijk? Er staat een sluitingshaak teveel?
Als ik het haakje ')' achter $sleutel weg laat krijg ik de volgende fout :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12
SELECT newsmain.ID, newsmain.InforefDoc, newsmain.InfoDat, newsmain.InfoTitel, newsmain.InfoDatBegin, newsmain.InfoDatEind, newsmain.Infolocatie FROM newsmain INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='899' where ID NOT IN (SELECT news_id FROM gelezen WHERE user_id = 'DPC5900' limit 0,20
Dat is het niet. Zoek even je juiste query op, want het probleem lijkt elders te liggen, en niet in de code die je geeft.
De variabele staat tussen quotes.
Wat ik VERMOED:
- PHPRunner gaat met jouw query nog een beetje lopen "knutselen". In je foutmelding van 17:11:28 zie je bijvoorbeeld "limit 0,20" staan. Die heb jij d'r niet achter gezet, maar dat heeft PHPRunner gedaan (VERMOED IK) om te pagineren (steeds 20 regels per pagina).
- Om het aantal pagina's te weten moet ie echter ook het totaal aantal regels bepalen. Dat doet ie door een "count(*)" op dezelfde tabel + where te doen. In jouw query gaat ie dan op zoek naar de FROM ... WHERE ... Als ik die in jouw query opzoek vind ik (incorrect) "FROM gelezen WHERE user_id = 'DPC5900')" (incl die laatste sluithaak, die in de complete query correct is).
- Daar plak ik dan "SELECT count(*)" voor om het aantal regels te weten (denkt PHPRunner), en dan heb je de bewuste foutieve query "SELECT count(*) FROM gelezen WHERE user_id = 'DPC5900')".
Uiteraard is dit een bug in PHPRunner (melden), maar misschien kun je dit voor nu op twee mogelijke manieren omzeilen:
1) Schrijf de "where" in "where ID NOT IN ..." eens met hoofdletters (dus "WHERE ID NOT IN ..."), misschien dat PHPRunner dan de goede FROM ... WHERE pakt voor z'n count(*). Of:
2) Door niet voor de "not in" te gaan, maar de optie "join-null" van Ben uit dit https://www.phphulp.nl/php/forum/topic/items-tonen-niet-niet-gelezen-zijn/102144/ topic.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$strSQL = "SELECT
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
LEFT JOIN gelezen ON gelezen.news_id = newsmain.ID AND user_id = '$sleutel'
WHERE gelezen.news_id is null
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
LEFT JOIN gelezen ON gelezen.news_id = newsmain.ID AND user_id = '$sleutel'
WHERE gelezen.news_id is null
Jij hebt het aan het juiste eind, ik heb de "left join" gebruikt en de query wordt nu door phprunner uitgevoerd.
Het probleem is van de baan.
Blijkbaar ken jij de phprunner zeer goed, en ben je een uitstekende programmeur.
Ik ben maar een beginneling van oudere leeftijd.
Ik dank u van harte voor de hulp die de oplossing was.
Dank u
Dirk