webForumDet fria alternativet

-> alfabetisk odning...nästan :-)

PHPur PHP

7 svar · 193 visningar · startad av Jontto

Medlem sedan okt. 2001125 inlägg
Frågan#1

Nedan finns min färdiga kod...nu bara ett problem som jag inte direkt vet hur jag ska lösa...

Enligt koden så radas alla ChordName bara upp efter det de har blivit skapade, men allra hels skulle jag se dem radade i ordningen C D E F G A B. Hur komma till detta? Har någon nå förslag?

"> 
    <FORM METHOD="post" ACTION="<?PHP echo $PHP_SELF; ?>?body=edit#action"> 
    Select chord: 
    <SELECT NAME="ChordToEdit[]"> 
    <?PHP 
     // connect to database 
     $link = mysql_connect($host, $login, $password); 
     mysql_select_db($dbase,$link); 
     $result = mysql_query("SELECT * FROM $table",$link); 
     while ($myrow = mysql_fetch_array($result)) { 
        // do something to every column 
        printf("\n\t\t<OPTION>%s</OPTION>",$myrow["ChordName"]); 
     } // end while 
     echo "\n\n"; 
    ?> 
    </SELECT> 
    <INPUT TYPE="submit" VALUE="Edit chord"> 
    <INPUT TYPE="hidden" NAME="editchord"> 
    </FORM>

MVH, Jontto

------------------
"För att lyckas här i livet ska man verka tokig men vara vis"
-Montesquieu-

Medlem sedan dec. 1999483 inlägg
#2

Byt ut

$result = mysql_query("SELECT * FROM $table",$link);

mot

$result = mysql_query("SELECT * FROM $table ORDER BY ChordName",$link);

Fel av mig trodde du ville ha det i alfabetisk ordning

------------------
/Emil Hesslow

[Redigerat av Asterix den 03 jan 2002]

Medlem sedan okt. 2001125 inlägg
#3

Tackar å bockar...de e juh ändå lite trevligare nu. Men min högsta önskan består...finns det faktiskt ingen som kan ge lite tips om hur göra det??

*le snällt*

Jontto

------------------
"För att lyckas här i livet ska man verka tokig men vara vis"
-Montesquieu-

Medlem sedan dec. 200012 464 inlägg
#4

$result = mysql_query("SELECT * FROM $table order by case chordName when 'C' then 1 when 'D' then 2 when 'E' then 3 when 'F' then 4 when 'G' then 5 when 'A' then 6 when 'B' then 7 end ",$link);

Jag förutsätter att chordName bara innehåller ett tecken.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001125 inlägg
#5

ChordName har nog flera tecken, så din kod i sig själv hjälper inte

Däremot löste jag redan uppgiften, kommentera gärna om den går att lösa enklare, ty min inläggsantal visar ungefär hur långt jag hunnit med PHP :e

 $result = mysql_query("SELECT * FROM $table ORDER BY ChordName",$link);
 $C=0;$Db=0;$D=0;$Eb=0;$E=0;$F=0;$Gb=0;$G=0;$Ab=0;$A=0;$Bb=0;$B=0;
 while ($myrow = mysql_fetch_array($result)) {
	// do something to every column
	$check = $myrow["ChordName"];
	$letters = substr($check,0,2);
	if($letters == 'Db') {$chord_array_Db[$Db] = $check;$Db++;}
	else if($letters == 'Eb') {$chord_array_Eb[$Eb] = $check;$Eb++;}
	else if($letters == 'Gb') {$chord_array_Gb[$Gb] = $check;$Gb++;}
	else if($letters == 'Ab') {$chord_array_Ab[$Ab] = $check;$Ab++;}
	else if($letters == 'Bb') {$chord_array_Bb[$Bb] = $check;$Bb++;}
	else {
		$letters = substr($check,0,1);
		if($letters == 'C') {$chord_array_C[$C] = $check;$C++;}
		else if($letters == 'D') {$chord_array_D[$D] = $check;$D++;}
		else if($letters == 'E') {$chord_array_E[$E] = $check;$E++;}
		else if($letters == 'F') {$chord_array_F[$F] = $check;$F++;}
		else if($letters == 'G') {$chord_array_G[$G] = $check;$G++;}
		else if($letters == 'A') {$chord_array_A[$A] = $check;$A++;}
		else if($letters == 'B') {$chord_array_B[$B] = $check;$B++;}
	} // end 1st if-else
 } // end while
	foreach($chord_array_C as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_Db as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_D as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_Eb as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_E as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_F as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_Gb as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_G as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_Ab as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_A as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_Bb as $key) {echo "<OPTION>$key\n";}
	foreach($chord_array_B as $key) {echo "<OPTION>$key\n";}

Med vänliga onsdagshälsningar, Jontto

------------------
"För att lyckas här i livet ska man verka tokig men vara vis"
-Montesquieu-

Medlem sedan dec. 200012 464 inlägg
#6

Ok, men det går att enbart sortera direkt på första bokstaven i select-satsen.

$result = mysql_query("SELECT * FROM $table order by case substring(chordName from 1 for 1) when 'C' then 1 when 'D' then 2 when 'E' then 3 when 'F' then 4 when 'G' then 5 when 'A' then 6 when 'B' then 7 end ",$link);

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001125 inlägg
#7

ahaa...finns det ett enkelt sätt att lite avancicera? Ett sätt att få dem i ordningen C Db D Eb E F Gb G Ab A Bb B ?
Fixar det nog med php, men får jag det på nåt sätt me en query oxå?

Tack, Jontto

------------------
"För att lyckas här i livet ska man verka tokig men vara vis"
-Montesquieu-

Medlem sedan dec. 200012 464 inlägg
#8
$result = mysql_query("SELECT * FROM $table order by case " .
"when substring(chordName from 1 for 2) = 'Db' then 2 " .
"when substring(chordName from 1 for 2) = 'Eb' then 4 " .
"when substring(chordName from 1 for 2) = 'Gb' then 7 " .
"when substring(chordName from 1 for 2) = 'Ab' then 9 " .
"when substring(chordName from 1 for 2) = 'Bb' then 11 " .
"when substring(chordName from 1 for 1) = 'C' then 1 " .
"when substring(chordName from 1 for 1) = 'D' then 3 " .
"when substring(chordName from 1 for 1) = 'E' then 5 " .
"when substring(chordName from 1 for 1) = 'F' then 6 " .
"when substring(chordName from 1 for 1) = 'G' then 8 " .
"when substring(chordName from 1 for 1) = 'A' then 10 " .
"when substring(chordName from 1 for 1) = 'B' then 12 end"
,$link);

------------------
essentitia preter non sans multiplicandum

134 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)