Avatar billede testwatest Nybegynder
11. februar 2007 - 11:29 Der er 14 kommentarer og
1 løsning

Alfabetisk sortering/gruppering

Hvis jeg har en tabel fyldt med diverse rækker, hvordan kan jeg så udskrive ALLESAMMEN, men give dem nogle 'overoverskrifter'?

Hvis jeg har følgende data:

titel: Brugere; text: "Dette handler om brugere";
titel: Bananer; text: "Dette handler om bananer";
titel: Skabe; text: "Dette handler om skabe";
titel: Drengenavne; text: "Dette handler om drengenavne";

så vil jeg have det udskrevet således:

B:
Bananer - Dette handler om bananer
Brugere - Dette handler om brugere

D:
Drengenavne - Dette handler om drengenavne

S:
Skabe - Dette handler om skabe
Avatar billede testwatest Nybegynder
11. februar 2007 - 11:30 #1
jeg vil både høre hvordan jeg gør det med forbogstavet, men også hvordan jeg bare grupperer efter titlen. Hvis nu jeg har 2 rækker som har feltet "Brugere", så skal disse to stå under samme 'overemne'.
Avatar billede brinck10 Nybegynder
11. februar 2007 - 11:39 #2
:) Det gør du med funktionen:
sort(). Den tager et parameter; arrayet som skal sorteres, eksempel:

navn[] = "Benny"
navn[] = "Sigurd"
navn[] = "Ole"
navn[] = "Søren"

for($i = 0; $i < sizeof($navn); $i++){
echo sort($navn);
echo "<br>"

Resultat:

Benny
Ole
Sigurd
Søren

:) - Frederik
Avatar billede testwatest Nybegynder
11. februar 2007 - 11:45 #3
Det skal hives ud fra en mysql-tabel, og jeg vil også have overskrifterne.
Avatar billede brinck10 Nybegynder
11. februar 2007 - 11:48 #4
Vil du så ikke uddybe dig lidt bedre, fordi så er jeg lost. Forstår ikke dit andet spørgsmål.
Avatar billede testwatest Nybegynder
11. februar 2007 - 11:58 #5
Her har jeg 5 rækker, og de består af felterne "titel" og "text", som også er angivet:

titel: Brugere; text: "Dette handler om brugere1";
titel: Brugere; text: "Dette handler om brugere2";
titel: Skabe; text: "Dette handler om skabe";
titel: Drengenavne; text: "Dette handler om drengenavne";


Nu vil jeg så gerne sortere disse, således at man blot kan kigge under "Brugere", for at se ALLE rækkerne der har titlen "Brugere". Så et output vil se således ud:

Brugere:
Dette handler om brugere1
Dette handler om brugere2

Drengenavne:
Dette handler om drengenavne

Skabe:
Dette handler om skabe


--
Jeg tror det hele har noget at gøre med group by
Avatar billede testwatest Nybegynder
11. februar 2007 - 11:59 #6
4 felter* :D:D.. godt talt
Avatar billede testwatest Nybegynder
11. februar 2007 - 11:59 #7
rækker*. det går godt =)
Avatar billede brinck10 Nybegynder
11. februar 2007 - 12:07 #8
while($result = mysql_fetch_array){
  echo "Brugere:<br>";
  if($result["titel"] == "bruger"){
  echo $result["text"];
  echo "<br>";
  }
  echo "Drengenavne:<br>";
  if($result["titel"] == "drengenavne"){
  echo $result["text"];
  echo "<br>";
  }
  echo "Skabe:<br>";
  if($result["titel"] == "skabe"){
  echo $result["text"];
  echo "<br>";
  }
  break;
}
Avatar billede testwatest Nybegynder
11. februar 2007 - 12:24 #9
Titlerne skal ikke indsættes manuelt. Den skal udskrive ALLE rækker, og gruppere dem efter titlerne!
Avatar billede brinck10 Nybegynder
11. februar 2007 - 12:31 #10
:( Så kan jeg desværre ikke hjælpe dig!
Avatar billede coderdk Praktikant
11. februar 2007 - 13:49 #11
Prøv:

$text = 'titel: Brugere; text: "Dette handler om brugere1";
titel: Brugere; text: "Dette handler om brugere2";
titel: Skabe; text: "Dette handler om skabe";
titel: Drengenavne; text: "Dette handler om drengenavne";';

preg_match_all( "/titel: (.*?); text: \"(.*?)\";/i", $text, $m, PREG_SET_ORDER );
$result = array();
foreach ( $m as $hit )
{
    if ( !array_key_exists( $hit[1], $result ) )
    {
        $result[$hit[1]] = array();
    }
    $result[$hit[1]][] = $hit[2];
}

foreach ( $result as $group => $items )
{
    echo "<b>$group</b>:<br>";
    foreach ( $items as $item )
    {
        echo "$item<br>";
    }
    echo "<br>";
}
Avatar billede testwatest Nybegynder
11. februar 2007 - 14:37 #12
I har misforstået mig :/

Jeg har kun stillet det op sådan for at vise hvilket der hører under hvilke felter.

Det er en ganske normal mysql-tabel med 3 felter(id, titel, text).

Problemet er hvordan min mysqlforespørgelse(select * from tabel) skal se ud.
Avatar billede coderdk Praktikant
11. februar 2007 - 14:49 #13
Ok, så var det lidt uheldigt formuleret :P
Forespørgslen skal se ud som alle andre. Du skal blot lave ORDER BY titel:

$sql = "SELECT titel, `text` FROM dintabel ORDER BY titel";
$qh = mysql_query( $sql ) or die( mysql_error() );
$old = "";
while ( $row = mysql_fetch_assoc( $qh ) )
{
  if ( $old != $row['titel'] )
  {
      if ( $old == "" ) echo "<br>";
      echo "<b>$row[titel]</b><br>";
      $old = $row['titel'];
  }
  echo "$row[text]<br>";
}
Avatar billede testwatest Nybegynder
13. februar 2007 - 11:49 #14
perfekt. Hvordan grupperes blogindlæg efter måneder på de fleste weblogs?
Avatar billede coderdk Praktikant
13. februar 2007 - 13:37 #15
Tjah, det kan jo gøres på samme måde, hvor $old så bare er måneden, og SELECT'en er lavet med ORDER BY på måned...
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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