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!
Hier is overigens het hele stuk code:

<?php
echo '<br><br>
<b>10 meest gebruikte zoekwoorden:</b><br><br>
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse">
<tr bgcolor="#a4c7d9">
<td>&nbsp;&nbsp;</td>
<td><b>Zoekwoord</b></td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td><b>Unieke bezoekers</b></td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td><b>Aantal hits</b></td>
<td>&nbsp;&nbsp;&nbsp;</td>
</tr>';

// 10 meest gebruikte zoekwoorden
// GROUP BY referer ORDER BY SUM(visits) DESC


$query_overzicht_referers_optellen2 = mysql_query("SELECT referer, SUM(visits) AS visits, SUM(hits) AS hits FROM stats WHERE referer != 'bookmark' AND referer != '' AND referer LIKE '%q%' GROUP BY referer LIKE CONCAT('%',SUBSTRING(SUBSTRING(referer FROM LOCATE('q=',referer)) FROM LOCATE('&',SUBSTRING(referer FROM LOCATE('q=',referer)))),'%') ORDER BY visits DESC, hits DESC LIMIT 10") or die(mysql_error());

while($overzicht_referers_optellen2 = mysql_fetch_assoc($query_overzicht_referers_optellen2))
{
$visits_referers2 = $overzicht_referers_optellen2['visits'];
$hits_referers2 = $overzicht_referers_optellen2['hits'];

$domein_referers2 = str_replace("http://", "", $overzicht_referers_optellen2['referer']);
$domein_referers2 = explode("q=", $domein_referers2[1]);
$domein_referers2 = explode("&", $domein_referers2[1]);

echo '<tr bgcolor="#E2EEF3">';
echo '<td></td>';
echo '<td><a href="'.$overzicht_referers_optellen2['referer'].'" target="_blank">'.$domein_referers2[0].'</a></td>';
echo '<td></td>';
echo '<td>'.$visits_referers2.'</td>';
echo '<td></td>';
echo '<td>'.$hits_referers2.'</td>';
echo '<td></td>';
echo '</tr>';
}

echo '</table>';
?>
Nick Peters schreef op 08.10.2006 00:31

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 begrijp dat alles lukt behalve het gedeelte voor het &-teken te selecteren. Kun je dit niet voor elkaar krijgen met SUBSTRING_INDEX()? Deze functie pakt de substring voor een bepaalde index:


SELECT SUBSTRING_INDEX('iets_met_een&teken_erin', '&' , 1)

// Output:
iets_met_een

Reageren