Hoi iedereen,
Ik heb in een database winkels staan, nu wil ik die gaan sorteren per begin letter van elke winkel. Dus alle winkels onder de A moeten bij elkaar komen, B, C enz.
De winkels moeten worden verdeeld onder 3 kolommen (die aanwezig zijn met divjes).
Nu kom ik er niet aan uit om de winkels weer te geven in 3 kolommen in de juiste volgorde. Ik heb het aantal winkels met de A eruit gehaald via mysql_num_rows en met de ceil funtie uitgerekend hoeveel winkels er per kolom moeten komen om de kolommen even groot te houden.
Mijn html code:PHP Code:
<?PHP
$winkels_a = mysql_query("SELECT
winkel_id,
winkel_naam
FROM winkels
WHERE winkel_naam LIKE 'A%'
ORDER BY winkel_naam ASC
");
$count_a = ceil(mysql_num_rows($winkels_a) / 3); // bij de A zijn er 24 rijen gevonden, output hier is 8.
?>
Zoals je hierboven ziet moeten de winkels verdeeld worden in 3 kolommen gesorteerd op winkelnaam ASC.Code:<div class="lijstwinkels"> <h2>A</h2> <div class="lijstwinkels1">Eerste 8 winkels</div> <div class="lijstwinkels2">Daaropvolgende 8 winkels</div> <div class="lijstwinkels3">Daaropvolgende 8 winkels</div> </div>
Ben me suf aan het staren over de beste oplossing, iemand een idee?
- Database uitlezen en verdelen in 3 kolommen
-
15-02-2011, 22:42 #1
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Database uitlezen en verdelen in 3 kolommen
Laatst aangepast door Sjoerd van Mook : 15-02-2011 om 22:48
-
In de schijnwerper
ZwangerschapInWeken.nl DA10 - Zwangerschapskalender - Calculator - Veel contentWebsite te koopSenior Designster - top kwaliteit - 16 uur per week - per maand - 350 euroFreelance / WerkSupersnelle WordPress Webhosting vanaf € 3,00 per maandHostingVerhoog je Autoriteit met Blogs en BacklinksLinkpartners -
15-02-2011, 22:46 #2
- Berichten
- 195
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
ORDER BY winkel_naam ASC
heb je in het script staan, en laterna zeg je dat je ze op ID gesorteerd wilt hebben? Misschien dat je dat over het hoofd gezien hebt?
-
15-02-2011, 22:48 #3
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Nee is een typ fout van mij Yordi, ze moeten gesorteerd worden op alfabetische volgorde van winkelnaam die beginnen met de A en dan zoals in mijn beginpost aangegeven in 3 kolommen.
Ik heb het aangepast.
-
16-02-2011, 01:02 #4
- Berichten
- 376
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Met een for lus je database resultaten doorlopen en met $x%8==0 een nieuwe div starten.
-
16-02-2011, 12:31 #5
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Oké, ben er nog niet helemaal aan uit wat jij bedoelt Peter.
Ik heb het nu via een omslachtige manier gedaan alleen voor de letter A, het werkt wel maar ik denk dat het openen van 4 query's niet bevorderlijk is voor de snelheid effectiviteit van de website. Ik heb hieronder even de query's ingekort want het zijn Joins, maar dat is niet van toepassing.
Kan je een kleines advies geven?
PHP Code:<?PHP
$winkels_a_count = mysql_query("SELECT
`winkels`.`winkel_id`,
`winkels`.`winkel_naam`
FROM `winkels`
WHERE winkels.winkel_naam LIKE 'A%'
ORDER BY `winkels`.`winkel_naam` ASC
");
//$x = mysql_num_rows($winkels_a_count);
$count_a = ceil(mysql_num_rows($winkels_a_count) / 3);
$x = 1;
//beginaantal
$w = $count_a * $x+1;
$q = $count_a * $x;
$q = $q *2 +1;
$winkels_a_kolom1 = mysql_query("SELECT
`winkels`.`winkel_id`,
`winkels`.`winkel_naam`
FROM `winkels`
WHERE winkels.winkel_naam LIKE 'A%'
ORDER BY `winkels`.`winkel_naam` ASC LIMIT ".$x.", ".$count_a."
");
$winkels_a_kolom2 = mysql_query("SELECT
`winkels`.`winkel_id`,
`winkels`.`winkel_naam`
FROM `winkels`
WHERE winkels.winkel_naam LIKE 'A%'
ORDER BY `winkels`.`winkel_naam` ASC LIMIT ".$w.", ".$count_a."
");
$winkels_a_kolom3 = mysql_query("SELECT
`winkels`.`winkel_id`,
`winkels`.`winkel_naam`
FROM `winkels`
WHERE winkels.winkel_naam LIKE 'A%'
ORDER BY `winkels`.`winkel_naam` ASC LIMIT ".$q.", ".$count_a."
");
?>
PHP Code:<div class="lijstwinkels">
<h2><a id="letter-A">A</a></h2>
<div class="lijstwinkels1">
<?PHP while($a_kolom1 = mysql_fetch_assoc($winkels_a_kolom1))
{
$naam = $a_kolom1['winkel_naam'];
$naam = str_replace(" ","_",$naam);
$naam = str_replace("&",">",$naam);
echo'
<a href="'.WEB_URL.$naam.'/" target="_self" title="'.htmlentities($a_kolom1['winkel_naam'],ENT_QUOTES).'">'.htmlentities($a_kolom1['winkel_naam'],ENT_QUOTES).'</a><br />';
}
?></div>
<div class="lijstwinkels2">
<?PHP while($a_kolom2 = mysql_fetch_assoc($winkels_a_kolom2))
{
$naam = $a_kolom2['winkel_naam'];
$naam = str_replace(" ","_",$naam);
$naam = str_replace("&",">",$naam);
echo'
<a href="'.WEB_URL.$naam.'/" target="_self" title="'.htmlentities($a_kolom2['winkel_naam'],ENT_QUOTES).'">'.htmlentities($a_kolom2['winkel_naam'],ENT_QUOTES).'</a><br />';
}
?></div>
<div class="lijstwinkels3">
<?PHP while($a_kolom3 = mysql_fetch_assoc($winkels_a_kolom3))
{
$naam = $a_kolom3['winkel_naam'];
$naam = str_replace(" ","_",$naam);
$naam = str_replace("&",">",$naam);
echo'
<a href="'.WEB_URL.$naam.'/" target="_self" title="'.htmlentities($a_kolom3['winkel_naam'],ENT_QUOTES).'">'.htmlentities($a_kolom3['winkel_naam'],ENT_QUOTES).'</a><br />';
}
?></div>
</div>
-
16-02-2011, 12:53 #6
Xironics Internet Diensten
- Berichten
- 88
- Lid sinds
- 17 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Als je veel regels hebt, lijkt het me efficentier om 1 query te maken die alle winkels selecteerd, die je vervolgens verdeeld in arrays. Deze arrays kun je dan gebruiken per letter ( kolom ).
Zo heb je maar 1 query, i.p.v. 26 ( indien alle letters worden gebruikt ).
Edit: wat je ook zou kunnen doen is 1 query die je sorteert op beginletter.
Vervolgens ga je in de loop kijken of de huidige beginletter nog hetzelfde is als de vorige beginletter, zoniet dan een nieuwe td/div aanmaken.
-
16-02-2011, 13:06 #7
- Berichten
- 376
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
1 query maken die alle winkels met de betreffende beginletter eruit haalt (en met COUNT(*) het aantal). Vervolgens dat aantal gedeeld door 3 ceilen. Dan bijv. in een for lus de resultaten doorlopen:
PHP Code:for($x=0;$x<$aantalresultaten;$x++) {
if($x%$aantalperdiv==0) echo '<div>';
echo "<a>$winkelnaam</a>";
if($x%($aantalperdiv+1)==0 || $x == ($aantalresultaten-1) echo '</div>';
}
-
22-02-2011, 14:14 #8
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Het is gelukt met de code van Peter.
Nu nog één vraag:
De output van de 3 kolommen loopt nu van links naar rechts.
Dus momenteel:
Kolom 1 | Kolom 2 | Kolom 3
id1 | id2 | id3
id4 | id5 | id6
enz.
Nu wil ik het:
id1 | id3 | id5
id2 | id4 | id6
Dus opeenvolgend onder elkaar met splitsing naar 3 kolommen.
Mijn code:
PHP Code:<div class="lijstwinkels">
<h2><a id="letter-A">A</a></h2>
<?PHP
$winkels_a_count = mysql_query("SELECT
`winkels`.`winkel_id`,
`winkels`.`winkel_naam`
FROM `winkels`
WHERE winkels.winkel_naam LIKE 'A%'
ORDER BY `winkels`.`winkel_naam` ASC
");
$count_a = mysql_num_rows($winkels_a_count);
$gedeeld_a = ceil($count_a / 3);
for($x=0;$x<$count_a;$x++) {
while($a_kolom1 = mysql_fetch_assoc($winkels_a_count)) {
$naam = $a_kolom1['winkel_naam'];
$naam = str_replace(" ","_",$naam);
$naam = str_replace("&",">",$naam);
if($x%$gedeeld_a==0) echo '<div class="lijstwinkels1">';
echo '<a href="'.WEB_URL.'winkel/'.$naam.'/" target="_self" title="'.htmlentities($a_kolom1['winkel_naam'],ENT_QUOTES).'">'.htmlentities($a_kolom1['winkel_naam'],ENT_QUOTES).'</a><br />';
if($x%($gedeeld_a+1)==0 || $x == ($count_a-1)) echo '</div>';
}
}
?>
</div>
-
22-02-2011, 16:52 #9
- Berichten
- 376
- Lid sinds
- 18 Jaar
Re: Database uitlezen en verdelen in 3 kolommen
Dat kan met CSS. Ik zou trouwens sowieso aanraden een <li>'s te gebruiken.
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