Avatar billede anderseiler Nybegynder
23. september 2005 - 13:01 Der er 8 kommentarer og
1 løsning

Udtræk i alfabetisk rækkefølge

Hejsa derude :)

Jeg er lidt i tvivl om det her spørgsmål hører til her eller under MySQL???

Skidt prøver her.

Hvis nu jeg har 300 navne i en database (bare normale danske navne), hvordan trækker jeg dem så ud så de kommer i alfabetisk rækkefølge?

Eller det aller bedste ville være, hvis én kunne hjælpe mig med at lave sådan, at man kan lave:

A B C D E F G H I J K L M N O P Q R S T U V X Y Z Æ Ø Å

Og når man så klikker på A kommer alle de navne som starter med A frem.. I alfabetisk rækkefølge. Det samme når man klikker på B eller C osv..

Håber en kan hjælpe :)

Hilsen Eiler :)
Avatar billede Slettet bruger
23. september 2005 - 13:33 #1
<?php
for ($i = "a"; $i <= "y"; $i++)
{
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "&bogstav=" . $i . "\">" . $i . "</a> ";
}

if (isset($_GET['bogstav']))
{
    echo "<hr />";
    $query = mysql_query("select `brugernavn` from `tabel` where `brugernavn` like '" . $_GET['bogstav'] . "%' order by `brugernavn` desc") or die (mysql_error());
    if (mysql_num_rows($query) >= 1)
    {
        while ($foo = mysql_fetch_object($query))
        {
            echo $foo->brugernavn . "<br />";
        }
    } else {
        echo "none";
    }
}
?>
Avatar billede net-base.dk Nybegynder
23. september 2005 - 13:57 #2
Ja men på den måde du har lavet der kan man sende ekstra ting ind i databasen. og det er ikke smart, så gør det hellere på denne måde...

if( isset($_GET["bogstev"])
{
  if( ($_GET["bogstav"] == "a") || ($_GET["bogstav"] == "b") || ovs. )
  {
    $$query = mysql_query("select `brugernavn` from `tabel` where `brugernavn` like '" . $_GET['bogstav'] . "%' order by `brugernavn` desc") or die (mysql_error());
  }
  else
  {
    // vil blive vist hvis man ændre på url'en
    echo "FEJL: du kan ik søge sådan";
  }

  ovs. så videre i hans kode.

På denne måde sikrer man at folk ikke kan ændre på url'en og til f.eks. ?bogstav=ab og så den kun vil søge efter navne som starter med ab...

tænk over det... man må aldrig give brugere lov til at kunne ændre i udtrækket... for kan de det kan du også stoppe din sql sætning og meget andet... og det vil du vel ikke have...

bare en lille reminder.
Avatar billede showsource Seniormester
23. september 2005 - 14:28 #3
Kender ikke lige LIKE men så'n her kan det også gøres

<?php
$valg = array();
for($i = "a"; $i <= "z"; $i++) {
    if(strlen($i) == 1) {
    $valg[] = $i;
    }
}

for($a = 0; $a < count($valg); $a++) {

echo "<a href='". $_SERVER["PHP_SELF"] ."?bogstav=". $valg[$a] ."'>". $valg[$a] ."</a><br />\r\n";
}

$sql = "SELECT * FROM `brugernavne`";

if(isset($_GET["bogstav"]) && in_array(strtolower($_GET["bogstav"]), $valg)) {
$sql .= " WHERE `brugernavn` LIKE '". $_GET["bogstav"] ."%'";
}

$sql .= " ORDER BY `brugernavn`";
echo $sql;
?>
Avatar billede coderdk Praktikant
23. september 2005 - 15:21 #4
Og husk at lave en index på det felt du bruger LIKE på, så stiger performance ;)
Avatar billede anderseiler Nybegynder
23. september 2005 - 20:54 #5
Nu har jeg udvidet gandso's eksempel til:

$stQrrelse = strlen($_GET['bogstav']);

if($stQrrelse > 1)
{
    echo "Du må ikke ændre i søgestrengen.. Fy skamme sig! Klik HER for at gå tilbage";
} else
{

    for ($i = "a"; $i <= "y"; $i++)
    {
        echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pageid=alle_brugere&bogstav=" . $i . "\">" . $i . "</a> ";
    }

    if (isset($_GET['bogstav']))
    {
        echo "<hr />";
        $query = mysql_query("SELECT `brugernavn` FROM `brugere` WHERE `brugernavn` LIKE '" . $_GET['bogstav'] . "%' order by `brugernavn` desc") or die (mysql_error());
        if (mysql_num_rows($query) >= 1)
        {
            while ($foo = mysql_fetch_object($query))
            {
                echo $foo->brugernavn . "<br />";
            }
        } else {
            echo "none";
        }
    }
}

Så er det problem med at man ændrer strengen til en større størrelse overstået. Udvider nok funktionen senere, men gider ikke lige nu :)

Har bare lige et sidste spørgsmål. Kan det udvides således, at 0-9 kommer med? Altså sådan at tal også er med i det?? :)

Gandso - du får point nu.. Håber du vil hjælpe alligevel :)

Takker til alle 4..

Forresten coderdk, hvad mener du? Forstår ikke :)

Hilsen Eiler...
Avatar billede coderdk Praktikant
23. september 2005 - 20:58 #6
Fyr denne af på din database:

ALTER TABLE `brugere` ADD INDEX (`brugernavn`);

Så vil din performance blive væsentligt bedre.

Kig på http://dev.mysql.com/doc/mysql/en/indexes.html
http://dev.mysql.com/doc/mysql/en/mysql-indexes.html
http://dev.mysql.com/doc/mysql/en/optimizing-database-structure.html

:)
Avatar billede anderseiler Nybegynder
23. september 2005 - 22:18 #7
Hehe fatter stadig ikke helt hvad du mener coderdk :) Er lidt dum til MySQL når det bliver lidt mere avanceret... Hvad gør den der du har sendt? Fatter ikke det som står på de sider du har skrevet :P

Forresten så lægger jeg gerne 25 mere i til dig, gandso, hvis du kan udvide din så den fungerer helt fra A-Å... Det ville være dejligt :) Kan nemlig ikke selv finde ud af det :P.. Eller giver 25 til anyone som kan udvide det til A-Å :)

Eiler :)
Avatar billede coderdk Praktikant
23. september 2005 - 23:26 #8
ALTER TABLE `brugere` ADD INDEX (`brugernavn`);

Gør at din query "koster" mindre på SQL-serveren - Derfor bliver den hurtigere. Hvis du søger igennem 1000 rækker bliver den ca. 100 gange hurtigere ;P Indexes er lidt avanceret ;P
Avatar billede anderseiler Nybegynder
23. september 2005 - 23:29 #9
Hehe okay... Meeen må ærligt indrømme at MySQL ikke lige er min stærke side når man skal andet end insert, select, delete og update... Og så lige lave strukturen (normal struktur, ikke noget hokus-pokus) :P...

Kan du hjælpe med mit lille problem mht. det kode eksempel jeg skrev? Sådan at det fatter alt fra A-Å?? så er du sød (og får 25 point) :D hehe..
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Politiets Efterretningstjeneste

Data engineer til PET