GROUP BY .. LIKE %CONCAT('%',SUBSTRING(...),'%')
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
<?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());
?>
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:
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
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
<?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
)
)
)
)
?>
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!
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters
$waarde tussen q= en & kan je ophalen door:
$_GET['q']
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters
*kuch* ... en dat zegt iemand met 8 post en zelf verder (nog) niet heeft meegedaan aan het forum..... *kuch*
lissy:
*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
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.
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters
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
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..)
EDIT:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
CONCAT(
'%',SUBSTRING(
SUBSTRING(
referer FROM LOCATE(
'q=',referer
)
) FROM LOCATE(
'&',SUBSTRING(
referer FROM LOCATE(
'q=',referer
)
)
),'%'
)
'%',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
Gewijzigd op 01/01/1970 01:00:00 door Legolas
SELECT
id, SUM(id) as totaal
FROM tabel
WHERE
ding LIKE 'ding'
GROUP BY id
HAVING id > 50
zo ies het isgeleerd
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?
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters
Het is me niet helemaal duidelijk wat je bereiken wil dus als je dat eerst eens uitlegt?
http://www.google.nl/search?hl=nl&q=dsfdfsdf&btnG=Google+zoeken&meta=
Het doel is om te groeperen op records die hetzelfde hebben staan tussen: q= en &
hoe lijkt dat, dat bedoelde Robert ook vlgns mij in zijn post van 9.06
Die URL staat in de database als record.. hij moet groeperen op een gedeelte in een record.
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters
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
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.
Gewijzigd op 01/01/1970 01:00:00 door Nick Peters