2014-03-07, 00:56
  #1
Medlem
Cryxs avatar
Ja, jag vet inte hur jag ska beskriva detta i titel, här kommer exemplet.

Jag har en tabell kallad Artiklar. den ser ut såhär:
Kod:
Id              title           category    pubdate
----------  ----------  ----------  ----------
1              Nyhet 1       Inrikes
2              Nyhet 2       Inrikes 
3              Nyhet 3       Inrikes 
4              Nyhet 4       Utrikes     
5              Nyhet 5       Utrikes   
Jag vill göra en högermeny med denna lista så den ska se ut såhär:
Kod:
Inrikes
 - Nyhet 1
 - Nyhet 2
 - Nyhet 3
Utrikes
 - Nyhet 4
 - Nyhet 5

Men jag får inte till det hur jag än gör. Detta har jag just nu:
Kod:
SELECT title, category FROM Artiklar GROUP BY category;
Men då får jag bara upp alla nyheter EN/singel gång, men båda kategorierna kommer med, typ såhär:
Kod:
Inrikes
- Nyhet 1
Utrikes
- Nyhet 4
Men varför ser jag inte varenda nyhet jag skapat? Jag har även provat sätta DISTINCT, men det går bara göra på en kolumn åt gången, annars får jag error.

Måste jag kanske göra en databas-call för title-kolumnen först, och sen en ny databas-call med DISTINCT category?
__________________
Senast redigerad av Cryx 2014-03-07 kl. 00:59.
Citera
2014-03-07, 02:31
  #2
Medlem
Kod:
SELECT title, category FROM Artiklar ORDER BY category;

Sedan får du väl med kod se när category går över från Inrikes till Utrikes.
Citera
2014-03-07, 10:45
  #3
Medlem
Cryxs avatar
Det där gör ingen skillnad. Det måste vara min forloop som printar ut resultatet som är fel. Den ser ut såhär:

[PHP]if($pageId == "nyheter") {
echo "<ul>";
foreach($res as $article) {
$artCat= $article['category'];
$artLink= $article['title'];
echo "<li><h3> " . $artCat. "</h3></li>";
echo $artLink;
}
}[/PHP]
Citera
2014-03-07, 14:37
  #4
Medlem
Tvillingens avatar
Citat:
Ursprungligen postat av Cryx
Det där gör ingen skillnad. Det måste vara min forloop som printar ut resultatet som är fel. Den ser ut såhär:

[PHP]if($pageId == "nyheter") {
echo "<ul>";
foreach($res as $article) {
$artCat= $article['category'];
$artLink= $article['title'];
echo "<li><h3> " . $artCat. "</h3></li>";
echo $artLink;
}
}[/PHP]

Borde du inte kunna lösa det på det här sättet istället?

[PHP]<?php
if($pageId == "nyheter") {
echo "<ul>";
$currentCat = null;
foreach($res as $article) {
$artCat = $article['category'];
$artLink= $article['title'];
if($currentCat != $artCat) {
echo "<li><h3> " . $artCat. "</h3></li>";
$currentCat = $artCat;
}
echo $artLink;
}
}
?>[/PHP]

Alternativt så här

[PHP]$articles = array();
foreach($res as $article) {
$articles[$article['category']][] = $article;
}
echo '<ul>';
foreach($articles as $category => $items) {
echo '<li><h3>' . $category . '</h3></li>';
foreach($items as $item) {
echo $item['title'];
}
}
echo '</ul>';[/PHP]

Nu är det kanske inte de finaste lösningarna och borde gå att göra lite snyggare, men det var lösningarna som dök upp i huvudet just nu. Det här gäller ifall du väljer att sortera efter kategori (och id eller något annat om du vill det också) istället för att köra group by.
Citera
2014-03-07, 15:45
  #5
Medlem
Cryxs avatar
Najs! Provade det första alternativet och nu fungerar det. Det funkade dock bara göra med ORDER BY på databasen och inte GROUP BY som jag hade innan. Tack ska du ha!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in