Hallo,
Als programmeurgroentje heb ik de volgende vraag.
Is het mogelijk om met php een database kolom te sorteren op een bepaalde tekst in die kolom?
Als voorbeeld:
Ik heb een kolom "woonplaats".
Hierin staat bv. "1234 HV AMSTERDAM".
Nu zoek ik (indien mogelijk) een query die de data uit deze kolom sorteerd aan de hand van "AMSTERDAM".
Is dit mogelijk?
BVD.
RobinAngelo
- Sorteren database kolom met 3 waarden
-
04-10-2010, 13:33 #1
- Berichten
- 15
- Lid sinds
- 17 Jaar
Sorteren database kolom met 3 waarden
-
-
04-10-2010, 13:45 #2
- Berichten
- 1.031
- Lid sinds
- 17 Jaar
Tja, eigelijk klopt je database-model niet. Beter was om postcode in een appart veld te zetten.
Ik vermoed (heb geen MySQL zo bij de hand), dat zoiets anders wel kan (maar het is niet waterdicht)
...
ORDER BY substring(8,100, woonplaats)
-
04-10-2010, 14:04 #3
- Berichten
- 15
- Lid sinds
- 17 Jaar
Hallo Jopie T,
Bedankt voor je reactie.
Ja klopt, dat zou idd. handiger zijn.
Echter importeer ik de adres gegevens uit een aangeleverd .csv bestand.
Hierin zijn de gegevens "1234 HV AMSTERDAM" helaas niet tab gescheiden.
Zou je die regel "ORDER BY substring(8,100, woonplaats)" iets kunnen toelichten?
Hoe sorteer je de data op deze manier bv. alfabetisch?
En wat bedoel je met (maar het is niet waterdicht) ?
-
04-10-2010, 14:13 #4
- Berichten
- 158
- Lid sinds
- 14 Jaar
Het is niet waterdicht als bijvoorbeeld een postcode als 1234AB Amsterdam is ingevuld.. Je merkt dan dat je op plaats 7 begint, i.p.v. 8 (je substring is dus niet goed meer dan). Het beste is om dan meteen vanuit je .csv dit goed in de database te plaatsen lijkt me :) Tevens onnodig werk voor je query natuurlijk ;)
-
04-10-2010, 14:44 #5
- Berichten
- 15
- Lid sinds
- 17 Jaar
De gegevens in het csv bestand zijn qua indeling gelijk ( altijd postcodecijfer, spatie, postcodeletter, spatie, woonplaats ).
Ik heb nu de volgende code:
<?php
include 'config.php';
$query = "SELECT * FROM adres_boek ORDER BY substring(100,8, vest_woonplaats)";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "Bedrijfsnaam: {$row['handelnaam']} <br>" .
"Vestigings adres: {$row['vest_adres']} <br>" .
"Vestigings woonplaats: {$row['vest_woonplaats']} <br><br>";
}
?>
Dit geeft een output als:
Bedrijfsnaam: Dummy Bedrijfsnaam BV
Vestigings adres : Dummy Straatnaam 1
Vestigings woonplaats : 1234 HV GRONINGEN
Bedrijfsnaam: Dummy Bedrijfsnaam BV
Vestigings adres : Dummy Straatnaam 1
Vestigings woonplaats : 1234 HV AMSTERDAM
Bedrijfsnaam: Dummy Bedrijfsnaam BV
Vestigings adres : Dummy Straatnaam 1
Vestigings woonplaats : 1234 HV UTRECHT
Bedrijfsnaam: Dummy Bedrijfsnaam BV
Vestigings adres : Dummy Straatnaam 1
Vestigings woonplaats : 1234 HV AMSTERDAM
enz...
Nu wil ik graag dat hij de woonplaats op alphabetische volgorde plaatst.
Dit zodat ik straks een klikbare a-z index kan laten weergeven.
Bv. wanneer iemand op de letter U klikt, dat er dan alleen woonplaatsen die beginnen met de letter U worden weergegeven.
-
04-10-2010, 14:45 #6
- Berichten
- 243
- Lid sinds
- 15 Jaar
ik zal idd de gene die het csv bestand aanleverd te vragen om dit juist aan te leveren. Dit is geen werken op zo'n manier! Het kan wel met een query maar is van zoveel factoren afhankelijk dat het een hele brakke query maakt.
Daarnaast neemt een dergelijke query ook veel tijd in beslag, wat dus weer niet ten goede komt van je performance.
-
04-10-2010, 14:50 #7
- Berichten
- 750
- Lid sinds
- 15 Jaar
Kun je de CVS importer laten zien met een kleine aanpassing kun je het wel filteren zodat de woonplaats in een andere veld in de database wordt gestopt
-
04-10-2010, 15:00 #8
- Berichten
- 15
- Lid sinds
- 17 Jaar
Dit is de code die ik gebruik om de csv (.txt) tab gescheiden te importeren.
<?
# first get a mysql connection as per the FAQ
include('config.php');
$fcontents = file ('./adressen.txt');
# expects the csv file to be in the same dir as this script
for($i=0; $i<sizeof($fcontents); $i++) {
$line = trim($fcontents[$i]);
$arr = explode("\t", $line);
#if your data is comma separated
# instead of tab separated,
# change the '\t' above to ','
$sql = "insert into adres_boek values ('".
implode("','", $arr) ."')";
mysql_query($sql);
echo $sql ."<br>\n";
if(mysql_error()) {
echo mysql_error() ."<br>\n";
}
}
?>
Dit zijn de kolommen in de database:
id
handelnaam
vest_adres
vest_woonplaats
corr_adres
corr_woonplaats
telefoon
mail
site
Aanvullend bericht:
Hallo allemaal,
Allereerst bedankt voor jullie reacties!
Ik heb inmiddels een andere oplossing gevonden.
Ik heb de gegevens in het excelbestand kunnen opsplitsen.
Hierdoor heb ik nu een aparte kolom "woonplaats" ( zonder de postcode ervoor ).
Voor mensen die een vergelijkbaar probleem hebben...
Ik heb hieronder een link geplaatst die laat zien hoe je eenvoudig in excel data kan opsplitsen.
Zie: http://www.teach-me.org/nl/cursussen..._in_excel.htmlLaatst aangepast door RobinAngelo : 04-10-2010 om 16:02 Reden: Automatisch samengevoegd.
-
06-10-2010, 15:36 #9
- Berichten
- 146
- Lid sinds
- 17 Jaar
Re: Sorteren database kolom met 3 waarden
SELECT LEFT(ab.vest_woonplaats,6) AS PC, MID(ab.vest_woonplaats,6) AS PLAATS FROM adres_boek AS ab ORDER BY PLAATS
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic