Avatar billede dkr Praktikant
10. juli 2009 - 01:56 Der er 15 kommentarer og
2 løsninger

databaseudtræk - besværlig sortering

Hej alle

Jeg skal ha lavet så et databaseudtræk kommer til at således ud

kategori 1
ting 1
ting 2
etc etc

kategori 2
ting 1
etc

det ser sådan ud i databasen

id, kategori, ting(titel)
1,kategori 2, ting 3
2,kategori 1, ting 1
etc... altså en stor blanding

Hvordan laver jeg det?
Håber at jeg har forklaret mig tydeligt nok, ellers så må jeg jo prøve igen.
Avatar billede fusion-it Nybegynder
10. juli 2009 - 08:17 #1
PHP er det ikke sql ?
Avatar billede fusion-it Nybegynder
10. juli 2009 - 08:20 #2
Jeg er ikke sikker på hvad du vil, kan du ikke forklare lidt mere ?

Du kan med stor fordel kikke her :
http://www.w3schools.com/sql/sql_where.asp

Vil du bare lave udtrækket fra en kolonne eller hvordan, ville være fint med lidt info om hvordan din DB struktur ser ud ?
Avatar billede majbom Novice
10. juli 2009 - 08:58 #3
SELECT * FROM tabel ORDER BY kategori

?
Avatar billede repox Seniormester
10. juli 2009 - 09:14 #4
Det virker ikke til at være et besværligt udtræk. Det virker som om du har en besværlig tabelstruktur.

Hvis vi tager dit eget eksempel, kan jeg så antage at din struktur er noget ala:
+----+------------+----------+
| id | kategori  | titel    |
+----+------------+----------+
|  1 | kategori 2 | ting 1  |
|  2 | kategori 1 | ting 1  |
|  3 | kategori 2 | etc      |
|  4 | kategori 1 | ting 2  |
|  5 | kategori 1 | etc etc  |
+----+------------+----------+

Du bliver ihvertfald nød til at lave 2 udtræk istedet for en enkelt.

noget ala:
"SELECT DISTINCT kategori FROM table ORDER BY kategori"

og derefter
"SELECT id, titel FROM table WHERE kategori='".$kategori."' ORDER BY titel";
Avatar billede fusion-it Nybegynder
10. juli 2009 - 10:04 #5
det var derfor jeg gerne ville se den struktur fra spørger :)
Avatar billede majbom Novice
10. juli 2009 - 10:11 #6
som jeg ser det er de bare:

$res = mysql_query("SELECT * FROM tabel ORDER BY kategori");
$header = "";

while(rows = mysql_fetch_assoc($res)){
  if($header!=row['kategori']){
      echo "<br><strong>".$row['kategori']."</strong><br>";
  }
  echo $row['titel']."<br>";
}
Avatar billede alphabits Nybegynder
10. juli 2009 - 10:21 #7
En lille rettelse til #6. Hvis tingene skal sorteres inden for de enkelte kategorier skal titel tilføjes til ORDER BY:

SELECT * FROM ting ORDER BY kategori, titel
Avatar billede majbom Novice
10. juli 2009 - 10:26 #8
-> #7 - præcis, men nu ved jeg jo ikke om det ER mit forslag spørger er ude efter, han har ikke meldt tilbage på nogle af kommentarerne, så han er nok på arbejde eller sover :)
Avatar billede repox Seniormester
10. juli 2009 - 10:53 #9
#6
Egentlig en udmærket løsning, hvis man gerne vil lave det over et udtræk.
Jeg sad og tænkte på løsninger der involverede nogle subqueries og noget pjat - men indimellem er selv den mest simple løsning også den bedste. :)
Avatar billede majbom Novice
10. juli 2009 - 11:01 #10
-> #7 - ja, der er jo ingen grund til at gøre det mere kompliceret - især ikke når vi ikke er helt klar over hvad spørger egentlig ønsker :)
Avatar billede dkr Praktikant
10. juli 2009 - 20:37 #11
Hej alle, jeg har ikke glemt jer :)

Her er min tabelstruktur fra phpmyadmin
-----------------------

  `id` int(10) NOT NULL auto_increment,
  `afsender` varchar(150) character set utf8 collate utf8_danish_ci NOT NULL,
  `noegleord` varchar(300) character set utf8 collate utf8_danish_ci NOT NULL,
  `titel` varchar(300) character set utf8 collate utf8_danish_ci NOT NULL,
  `indhold` longtext character set utf8 collate utf8_danish_ci NOT NULL,
  `tid` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `kategori` varchar(100) character set utf8 collate utf8_danish_ci NOT NULL,
--------------------------


Jeg har forsøgt mig med #6, uden hæld
Se evt resultatet af udtrækket her http://blind.ramsingsvej.net

det burde være:
Nyhedsbreve
Titel 1
Titel 2
Titel 4
Referater
Titel 3

Men det er:
Nyhedsbreve
Titel 1
Nyhedsbreve
Titel 2
Referater
Titel 3
Nyhedsbreve
Titel 4


Jeg håber jeg har forklaret det bedre.

MVH
DKR
Avatar billede majbom Novice
11. juli 2009 - 12:56 #12
det synes jeg lyder underligt, hvordan ser din sql-query ud?
Avatar billede dkr Praktikant
11. juli 2009 - 22:01 #13
Her.


$res = mysql_query("SELECT * FROM indhold ORDER BY kategori");
$header = "";

while($row = mysql_fetch_assoc($res)){
  if($header!=$row['kategori']){
      echo "<br><strong>".$row['kategori']."</strong><br>";
  }
  echo $row['titel']."<br>";
}

MVH
DKR
Avatar billede dkr Praktikant
12. juli 2009 - 02:06 #14
Da jeg ændrede den lidt så virker det :) se her under.

$res = mysql_query("SELECT * FROM indhold ORDER BY kategori");


while($row = mysql_fetch_assoc($res)){
  if($header!=$row['kategori']){
      echo "<br><strong>".$row['kategori']."</strong><br>";
  }
  echo $row['titel']."<br>";
$header = $row['kategori'];
}

MVH
DKR
Avatar billede majbom Novice
12. juli 2009 - 14:37 #15
-> #14 - ja, selvfølgelig, den er jo nødt til at ændre "header"

godt set ;)

så må vi hellere dele point :)
Avatar billede dkr Praktikant
12. juli 2009 - 17:53 #16
tak for hjælpen
Avatar billede majbom Novice
12. juli 2009 - 21:05 #17
selv tak, og tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester