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!
Na nog wat beter gekeken te hebben: volgens mij mist er een haakje sluiten voor die laatste procent in de concat.

EDIT:

CONCAT(
  '%',SUBSTRING(
    SUBSTRING(
      referer FROM LOCATE(
        'q=',referer
      )
    ) FROM LOCATE(
      '&',SUBSTRING(
        referer FROM LOCATE(
          'q=',referer
        )
      )
    ),'%'
  )


EDIT2: Er zijn hier dus meer open haakjes bedoelde ik
Moet die LIKE daar wel?

SELECT
id, SUM(id) as totaal
FROM tabel
WHERE
ding LIKE 'ding'
GROUP BY id
HAVING id > 50

zo ies het isgeleerd
Een extra haakje voor het procent teken heeft inderdaad de error weggehaald.

Is er geen oplossing voor de substring? Het lijkt me toch niet dat de substring alleen maar vanaf een bepaalde positie kan pakken? Ik moet juist het stuk tot een bepaalde positie hebben..

Klaasjan, heb je eventueel een alternatief?
Het is me niet helemaal duidelijk wat je bereiken wil dus als je dat eerst eens uitlegt?
GROUP by ".$_GET['q'] ?

hoe lijkt dat, dat bedoelde Robert ook vlgns mij in zijn post van 9.06
Hij moet groeperen op records in de database.. niet op de adresbalk

Die URL staat in de database als record.. hij moet groeperen op een gedeelte in een record.
Nu snap ik het Je wilt weten welke vragen er aan GOOGLE gesteld waarmee mensen op jou site kwamen
Dat kan ik zo een twee drie niet voor je maken met alleen SQL sorry
Klopt, veel zoekmachines gebruiken de GET variabele: q om het gezochte woord aan te geven.. die gezochte woorden wil ik eruit filteren om te weten hoeveel bezoekers er per gezocht woord op mijn site komen..

Oke helaas.. maar er is vast wel iemand die het wel lukt?
Ik had het werkend, alleen moest ik daar 2 queries voor gebruiken en dan had ik het gewenste resultaat niet, want dat kan alleen met 1 querie.

Reageren