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

PHP

7 svar · 198 visningar · startad av Jontto

Medlem sedan okt. 2001125 inlägg
Trådstart#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

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

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

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.

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

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);
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

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);
271 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)