het doel van de volgende code is om te groeperen op het gedeelte van een referer tussen de "q=" en het "&" teken..

<?php
mysql_query("
SELECT referer, SUM(visits) AS visits, SUM(hits) AS hits
FROM stats
WHERE referer != 'bookmark' AND referer != ''

GROUP BY referer

LIKE CONCAT('%',SUBSTRING(SUBSTRING(referer FROM LOCATE('q=',referer)) FROM LOCATE('&',SUBSTRING(referer FROM LOCATE('q=',referer))),'%')
ORDER BY visits DESC
LIMIT 10
") or die(mysql_error());
?>


Geeft de volgende error:

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 ''%') ORDER BY visits DESC, hits DESC LIMIT 10' at line 1


En ik weet nog steeds niet hoe ik de buitenste substring moet gebruiken om het goede resultaat te krijgen.

Dit is de code overzichtelijk uitgewerkt:

<?php
SUBSTRING
(
SUBSTRING
( // hij pakt hier het stuk na q=, je houdt over: zoekwoord&blabla=blabla&blabla=ja
referer
FROM
LOCATE
(
'q=',referer
)
)
FROM
LOCATE
( // hij pakt hier de positie van het eerste & teken
'&',
SUBSTRING
( // hij pakt hier het stuk na q=, je houdt over: zoekwoord&blabla=blabla&blabla=ja
referer
FROM
LOCATE
(
'q=',referer
)
)
)
)
?>

Op de error na gaat het mis bij de FROM in de buitenste SUBSTRING, hij moet daar namelijk het gedeelte voor het & teken pakken.. en niet erna.

Ik hoop echt dat iemand de moeite neemt om mij te helpen, ben er al veel te lang mee bezig..

Alvast bedankt!
Ik neem aan dat het om een GET waarde gaat?

$waarde tussen q= en & kan je ophalen door:

$_GET['q']
Als je het hele verhaal leest.. dan weet je wat het probleem is, zo'n nutteloze reactie heb ik niks aan..
*kuch* ... en dat zegt iemand met 8 post en zelf verder (nog) niet heeft meegedaan aan het forum..... *kuch*
lissy schreef op 08.10.2006 11:17
*kuch* ... en dat zegt iemand met 8 post en zelf verder (nog) niet heeft meegedaan aan het forum..... *kuch*


Gezien de SQL weet hij wel waar hij het over heeft.
Ik snap helemaal nicx van die GROUP BY LIKE(CONCAT
Oke, zijn er hier mensen die het misschien wel weten?

Alvast bedankt in elk geval. (Zit een beetje met mijn handen in het haar..)

Wat uitleg voor mensen die van mijn probleem wat kunnen leren:


GROUP BY referer
dit groepeert de resultaten op 'referer', wat een veld in de database is.

LIKE, is een soort zoekfunctie binnen mysql.

CONCAT('%', ... ,'%')
plakt de procent tekens eraan, voor de zoekfunctie.. hij groepeert dan de resultaten waarin een bepaald stuk voorkomt.. Die procent tekens geven aan dat er een stuk voor mag zitten, en een stuk erna.

SUBSTRING() deze functie pakt een stuk van een string vanaf een opgegeven positie, dit is tenminste met FROM erin verwerkt zo.. ik moet dus de substring tot een bepaalde positie hebben..

LOCATE() deze functie geeft de positie voor de functie substring aan.. hij kijkt op welke positie een bepaald teken voorkomt.
Frank en Jan Koehoorn zijn hiero ook errug handig met sql.

Maar even voor mijn beeld vorming wordt die LIKE gebruikt in het GROUP BY gedeelte?
Ja, die wordt inderdaad in de GROUP BY gebruikt
volgens mij mag de concat maar met 2 stukjes string in plaats van 3
@Legolas
Nee hoor

SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
-> NULL
mysql> SELECT CONCAT(14.3);
-> '14.3'
Nee, dit kan ook met 3 strings. (naar mijn weten..)

Reageren