Avatar billede Slettet bruger
30. juli 2007 - 07:51 Der er 26 kommentarer og
1 løsning

Sortering af tabel-liste

Hej.

Jeg har denne linie, og den virker (den udskriver tabellerne fra databasen).

$result = mysql_query("SHOW tables", $db);


Men jeg kunne godt tænke mig at tilføje dette:

ORDER BY ASC

Det kan jeg bare ikke få til at virke. Nogen gode idér ? Jeg har prøvet lidt forskelligt, men har endnu ikke ramt noget der ikke skriver fejl, eller advarsler ud.

På forhånd tak.

Ole.
Avatar billede oldnick Nybegynder
30. juli 2007 - 08:26 #1
include 'db.inc.php'; // din db connection

$result = @mysql_query("SELECT * FROM tabel ORDER BY id ASC ");
    if(!$result) {
exit('<p>Error preforming query:' . mysql_error() . '</p>');
}
while ($row = mysql_fetch_array($result)) {

$news = $row['news'];

echo "det du henter fra db eks. $news";
}
Avatar billede Slettet bruger
30. juli 2007 - 08:33 #2
Nu er det ikke indholdet af en tabel jeg vil have.

Det er tabellerne jeg får ud, men kan ikke finde ud af at sortere dem alfabetisk.

Her er hele koden:
<?php
$db = mysql_connect("localhost" , "BRUGERNAVN" , "PASSWORD");
mysql_select_db("DATABASENAVN" , $db);
$result = mysql_query("SHOW tables", $db);
while($row = mysql_fetch_row($result))
{
?>
<a href="FilDerViserIndhold.php?Navn=<?php print("$row[0]"); ?>" target="_parent"><?php print("$row[0]<br>"); ?>
</a>
<?php
}
?>

Der skal så sættes ind så listen er sorteret.
Avatar billede madsleejensen Nybegynder
30. juli 2007 - 09:04 #3
har prøvet lidt af hvert men kun kunne få dette til at virke

$tables = mysql_query("SHOW TABLES");
$arr = array();
while( $table = mysql_fetch_array( $tables ) ) {
    $arr[] = $table[0];
}
rsort( $arr , SORT_STRING );
print_r ( $arr );
sort( $arr , SORT_STRING );
print_r ( $arr );

evt brug asort / arsort hvis du vil beholde key index's!
Avatar billede Slettet bruger
30. juli 2007 - 09:14 #4
madsleejensen >

Jeg har 3 tabeller i databasen lige nu, og udskrivningen med din kode giver følgende:

Array ( [0] => 260707 [1] => 250507 [2] => 040707 ) Array ( [0] => 040707 [1] => 250507 [2] => 260707 )

Er det meningen ?
Avatar billede madsleejensen Nybegynder
30. juli 2007 - 09:23 #5
hehe det ved jeg ikke det spørger jeg dig om :)

så kan du jo senere lave en

for($i = 0; $i < sizeof( $arr ); $i++ ) {
?>
<a href="FilDerViserIndhold.php?Navn=<?=$arr[$i]?>" target="_parent"><?=$arr[$i]?></br>
</a>
<?php
}
Avatar billede Slettet bruger
30. juli 2007 - 09:26 #6
Jeg tænkte nu mere på om det var planen at dette skulle med ?

Array ( [0] =>

Dem skal man jo ikke bruge til noget. Jeg skal kun bruge tabel navnene :)

Jeg prøver lige dit nye indlæg.
Avatar billede Slettet bruger
30. juli 2007 - 09:34 #7
Den udskriver, men den sorterer ikke. De kommer ud sådan her:

040707
250507
260707

og den midterste skal jo enten være først eller sidst - afhængig af sortering, men ikke i midten. Det er som om den kun sorterer på de to første tegn - det skal jo helst være på alle tegn, ellers kan man jo ikke sortere rigtigt.

Flere gode ideer ?
Avatar billede madsleejensen Nybegynder
30. juli 2007 - 09:38 #8
hmmm for mig ser det altså ud som om den sortere :) ?

040707
250507
260707

040707 < 250507 < 260707

lav en

rsort( $arr )

hvis du vil sortere den anden vej ellers er jeg ikke med på hvad du mener med at sortere!
Avatar billede michael_stim Ekspert
30. juli 2007 - 09:43 #9
Ved ikke om man kan i MySQL:

SHOW TABLES ORDER BY TABLE_NAME
eller
SHOW TABLES FROM DB_NAME ORDER BY TABLE_NAME
Avatar billede Slettet bruger
30. juli 2007 - 09:44 #10
Med rsort bliver det så omvendt, men stadig med den samme i midten.

Jo den sorterer, men kun få de første 2 cifre ser det ud til.

0507 skal jo komme før eller efter 0707 ikk ? Men den kommer hele tiden i midten :)
Avatar billede madsleejensen Nybegynder
30. juli 2007 - 09:45 #11
Avatar billede madsleejensen Nybegynder
30. juli 2007 - 09:46 #12
ja selfølgelig sortere den på "hele" tallet og ikke dele af talet,
Avatar billede michael_stim Ekspert
30. juli 2007 - 09:53 #13
Den sorterer skam rigtigt nok, det er bare dig der tænker "forkert". Du tænker i dato baner, men den tager det mindste tal først ;o)
Avatar billede Slettet bruger
30. juli 2007 - 09:55 #14
Jeg har skam set på den link før, men jeg har problemer med at forstå alt det engelske, så derfor må jeg jo spørge.

Men jeg forstår ikke hvorfor 0507 hele tiden kommer i midten ved sortering. Hvis jeg skriver dem ind i en tabel, og helter dem med SELECT, så kommer de vel rigtigt ud, men det er jo ikke fidusen :)
Avatar billede michael_stim Ekspert
30. juli 2007 - 09:59 #15
http://www.eksperten.dk/spm/789427

erik sagde i den første tråd til dig at det var en dårlig idé ;o)

Det er klart det kommer i midten. Den sorterer som tal og ikke dato. Det kan du derimod hvis du lægger dem i en datokolonne.
Avatar billede Slettet bruger
30. juli 2007 - 10:05 #16
Ja, Erik er en klog mand, men jeg forventede nu ikke et problem her :)

Nu er det jo stadig tabellen der listes, og ikke et felt i tabellen. Så man kan vel ikke oprette en tabel som dato, eller ?
Avatar billede Slettet bruger
30. juli 2007 - 10:07 #17
Det vil sige jeg skal opfinde en nummerserie som tabelnavne for at kunne styre hvilken der er nyest, og hvilken der er ældst. Det var sådan set derfor jeg brugte datoen som tabelnavn.
Avatar billede michael_stim Ekspert
30. juli 2007 - 10:11 #18
Det kan lade sig gøre, men er lidt mere problematisk end alm. sortering. Søg på date sort +php
Avatar billede Slettet bruger
30. juli 2007 - 10:11 #19
michael_stim >

Der skulle meget til at vække mig :) men det lykkedes for dig. Nu kan jeg godt se at 040707 jo er meget mindre :-) set som tal.

Det var jo ikke så godt.
Avatar billede pidgeot Nybegynder
30. juli 2007 - 10:13 #20
Alternativt kunne man jo også bare placere årstallet først og dagen til sidst (hvis det virkelig ikke kan laves med en tabel og indeksering på dato). Så er det præcis som at sortere numerisk.
Avatar billede Slettet bruger
30. juli 2007 - 10:23 #21
Ja, det var jo en mulighed. Jeg kan vel derefter konvertere det til noget forståeligt. Da listen skal bruges til at vise indhold af tabellen, når man klikker på den, kan man jo ikke vise sådan en kryptisk liste. Det er ikke kun mig der skal se i den, men mange andre, og de bliver sikkert forvirret :)

Jeg takker for hjælp og input til idér. Er der flere end Mads der fortjener point ? :)
Avatar billede michael_stim Ekspert
30. juli 2007 - 10:27 #22
Jeg samler ikke på point, men istedet for at skrive en datesort funktion er pidgeots forslag nok noget nemmere.
20060123
20070121
20070201
osv
Avatar billede Slettet bruger
30. juli 2007 - 10:38 #23
Det vil sige du mener jeg skal bruge hele årstallet 2007 og ikke bare 07 ?

Det er jo ikke noget problem at skrive det ind på den måde, selvom det ikke er mig der skal gøre det, men nå de skal listes skal det jo vendes rigtigt, men det har jeg vistnok en rutine til et eller andet sted. Tak for hjælpen.
Avatar billede michael_stim Ekspert
30. juli 2007 - 10:41 #24
Ja, så er det lettere at læse for brugeren.
070605 <-- Hvad er år, dag og måned ;o)
Avatar billede Slettet bruger
30. juli 2007 - 10:47 #25
Det er rigtigt. Nu har jeg omdøbt tabellerne og får dem nu sådan her:

20070525
20070704
20070726

og så bliver de jo sorteret rigtigt efter mit hovede :)

Så skal jeg have dem vendt til noget fornuftigt ved visning, så det vil jeg kaste mig over.
Avatar billede Slettet bruger
30. juli 2007 - 11:18 #26
Så er det på plads, jeg får nu:

25. maj 2007
4. juli 2007
26. juli 2007

Og det kan de fleste vel forstå :-)

Flere der skal have svaret, så er det tid.

Tusind tak til alle for ubeskrivelig hjælp.
Avatar billede Slettet bruger
30. juli 2007 - 13:26 #27
Tak for al hjælp.
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