MYSQL: op domein grouperen
Beste php-ers,
In mijn database staan referenties in de vorm van websites. Daar wil ik graag op sorteren in een sql query. Punt alleen is dat ik op domeinnaam wil sorteren.
Dit zijn de verschillende URL's die in de database mogelijk zijn:
http://www.website.nl/blaat/test/hmm
http://website.nl/blaat/test/hmm
www.website.nl/blaat/test/hmm
website.nl/blaat/test/hmm
forum.website.nl/blaat/test/hmm
Mijn query zou er dus ongeveer zo uit moeten zien:
SELECT referenties REGEXP() as domein FROM tabel GROUP BY domein
Iemand enig idee?
In mijn database staan referenties in de vorm van websites. Daar wil ik graag op sorteren in een sql query. Punt alleen is dat ik op domeinnaam wil sorteren.
Dit zijn de verschillende URL's die in de database mogelijk zijn:
http://www.website.nl/blaat/test/hmm
http://website.nl/blaat/test/hmm
www.website.nl/blaat/test/hmm
website.nl/blaat/test/hmm
forum.website.nl/blaat/test/hmm
Mijn query zou er dus ongeveer zo uit moeten zien:
SELECT referenties REGEXP() as domein FROM tabel GROUP BY domein
Iemand enig idee?
Gesponsorde koppelingen:
Nee, groeperen is hier niet de juiste aanpak. Je wilt immers geen eigenschappen van de groep bepalen.
Het groeperen waar jij op doelt heeft enkel met de presentatie van gegevens te maken en doe je dus in PHP. Sorteer in de query op de domeinnaam en houd vervolgens in PHP in de while loop waarmee je de data fetch een variabele bij met de domeinnaam uit de vorige loop. Als die in deze loop verschilt, heb je dus met een nieuw domein te maken en zul je de naam weer moeten geven. Zo niet, dan hoef je enkel de data van het domein te tonen.
Dus iets als:
Het groeperen waar jij op doelt heeft enkel met de presentatie van gegevens te maken en doe je dus in PHP. Sorteer in de query op de domeinnaam en houd vervolgens in PHP in de while loop waarmee je de data fetch een variabele bij met de domeinnaam uit de vorige loop. Als die in deze loop verschilt, heb je dus met een nieuw domein te maken en zul je de naam weer moeten geven. Zo niet, dan hoef je enkel de data van het domein te tonen.
Dus iets als:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sVorige = '';
while($row = mysql_fetch_assoc($result)) {
if($row['domein'] != $sVorige) {
echo $row['domein'];
$sVorige = $row['domein'];
}
// Echo hier de rest van de gegevens
}
?>
$sVorige = '';
while($row = mysql_fetch_assoc($result)) {
if($row['domein'] != $sVorige) {
echo $row['domein'];
$sVorige = $row['domein'];
}
// Echo hier de rest van de gegevens
}
?>
Nee blanche, zie je niet dat wanneer hij zijn gegevens zal sorteren dat de urls van hetzelfde domein niet bij elkaar zullen zitten?
Bijvoorbeeld zo:
http://site1.eu/link
http://site2.eu/link
http://www.site1.eu/link
en nu alfabetisch sorteren zal niet ervoor zorgen dat alles van site1 bij elkaar zal staan.
@HellRazer: ik zou een extra kolom (of tabel) aanmaken met de domeinnaam erin. Die wordt dan bij het invoegen gesplitst uit de url dmv een regex in php (of mysql)
Nadien kan je heel makkelijk sorteren op domeinnaam..
Bijvoorbeeld zo:
http://site1.eu/link
http://site2.eu/link
http://www.site1.eu/link
en nu alfabetisch sorteren zal niet ervoor zorgen dat alles van site1 bij elkaar zal staan.
@HellRazer: ik zou een extra kolom (of tabel) aanmaken met de domeinnaam erin. Die wordt dan bij het invoegen gesplitst uit de url dmv een regex in php (of mysql)
Nadien kan je heel makkelijk sorteren op domeinnaam..
True, heb je helemaal gelijk in. De oplossing met een extra kolom voor de domeinnaam (of: id van het domein uit de domeinentabel) is een goede.
In dat geval kun je mijn eerder beschreven aanpak toepassen op die nieuwe kolom, en dus daarop sorteren.
In dat geval kun je mijn eerder beschreven aanpak toepassen op die nieuwe kolom, en dus daarop sorteren.



