webForumDet fria alternativet

Sortera i tabell med en MySql query

PHP

7 svar · 397 visningar · startad av Flashes

Medlem sedan jan. 2003282 inlägg
Frågan#1

Hej
Jag har en databas som alla klubbmedlemmar ligger i.
Från den databasen gör jag enskilda sidor för varje medlem, den delen fungerar.
Sedan vill jag göra en lista på alla medlemmar sorterade i en lite speciell ordning. Hur gör man det?
Jag kan läsa och lista allt i databasen så här

	<?php
	function mysql_die($error = "unknown")
	{
	echo "<H1>Error:". $error."</H1>";
	   exit;
	}

	$connection = mysql_connect("localhost","user","password") or mysql_die("Unable to connect");
	mysql_select_db("user_se_db",$connection);
	$result = mysql_query("SELECT namn, emejl, hemnr, mobnr FROM medlemmar", $connection);
	while ($row = mysql_fetch_row($result))
	{
	for ($i=0; $i<mysql_num_fields($result); $i++)
	echo $row[$i] . " ";
	echo "<br />";
	}
	mysql_close($connection);
	?>

Men då hamnar allt bara i den ordning det är inlagt i databasen.
Det skulle behöva se ut så här
http://medlem.spray.se/saladyk/link/medlemmar.php
men det jag får fram ser ut så här
http://medlem.spray.se/saladyk/link/medlemtest.php
Någon som har ett förslag?

Mvh
Jan-Olov

Medlem sedan jan. 2003282 inlägg
#2

Ny kod

	<?php
	function mysql_die($error = "unknown")
	{
	echo "<H1>Error:". $error."</H1>";
	   exit;
	}

	$connection = mysql_connect("localhost","user","password") or mysql_die("Unable to connect");
	mysql_select_db("user_se_db",$connection);
	$count = 0;
	$result = mysql_query("SELECT namn, emejl, hemnr, mobnr FROM medlemmar", $connection);
	while ($row = mysql_fetch_row($result))
	{
	for ($i=0; $i<mysql_num_fields($result); $i++)
	echo ("<td>$row[$i]&nbsp;  </td>");
	$count++;
	if ($count == 1){
	echo "</tr>";
	$count = 0;}
	}
	mysql_close($connection);
	?>

Nu fungerar tabellen, men jag vet fortfarande inte hur man sorterar och hur man får emejlen länkad och länkar till medlem.
t.ex en sådan här länk <a href="medlemdb.php?id=3">Leif Björkman</a>
Missade en sak med sorteringen jag har en kolumn med våra certifikat som jag vill soretra efter, den heter cert.

Mvh
Jan-Olov

Medlem sedan jan. 2003282 inlägg
#3

Förfinade tabellgenereringen lite, efter att ha tittat i mina böcker.
Men faktum kvarstår, jag får inte sorteringen att fungera.
Jag behöver sortera efter min tabell "cert" den innehåller en text som kan se ut så här "2-stjärnig instruktör CMAS". Jag har också 3, 2, 1-stjärnig dykare CMAS och fridykare i samma tabell "cert".
Går det överhuvudtaget att sortera efter den tabellen? eller måste jag skapa olika frågor för varje grupp av dykare? Hur gör jag det i såfall?
Min nuvarande kod ser ut så här

	<?php
	include 'error.inc';
	include 'db.inc';
	
	// Visa Medlemmar i tabell
	function displayMedlem($result)
	{
	echo "<h1>SSDKs medlemmar</h1>";
	
	//Börja tabell med tabellhuvud
	echo "\n<table>\n<tr>\n" .
	     "\n\t<th><p class=datum>Namn</p></th>" .
	     "\n\t<th><p class=datum>Emejl</p></th>" .
	     "\n\t<th><p class=datum>Hem Nr</p></th>" .
	     "\n\t<th><p class=datum>Mob Nr</p></th>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row = @ mysql_fetch_row($result))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row som separata ID (tabell data)
		foreach($row as $data)
		echo "\n\t<td><p class=tab> $data &nbsp;</p></td>";
	
		//Avsluta rad
		echo "\n</tr>";
		}
	
	//Avsluta sedan tabellen
	echo "\n</table>\n";
	}
	
	$query = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar";
	
	//Anslut till MySql servern
	if (!($connection = @ mysql_connect($hostName, $username, $password)))
	die("Kan ej ansluta");
	
	if (!(mysql_select_db("saladyk_se_db", $connection)))
	showerror();
	
	//Kör frågan på anslutningen
	if (!($result = @ mysql_query ($query, $connection)))
	showerror();
	
	//Visa resultatet
	displayMedlem($result);
	
	//Stäng anslutning
	if (!(mysql_close($connection)))
	showerror();
?>

Jag är tacksam för alla förslag.
Ni ser hur det ser ut och hur jag vill ha det här.
Det skulle behöva se ut så här
http://medlem.spray.se/saladyk/link/medlemmar.php
men det jag får fram ser ut så här
http://medlem.spray.se/saladyk/link/medlemtest.php

Mvh
Jan-Olov

Medlem sedan sep. 200254 inlägg
#4

Då kan du testa detta!

om du vill sortera medlemmarna i namnföljd med den som börja på a först och ö sist så skriver du till en sak i raden:

$result = mysql_query("SELECT namn, emejl, hemnr, mobnr FROM medlemmar", $connection);

och skriver istället:

$result = mysql_query("SELECT namn, emejl, hemnr, mobnr FROM medlemmar ORDER BY namn", $connection);

Du kan även sortera i omvändordning alltså text med den som har ett namn som börjar på ö först och en som börjar på a sista kan du skriva så här istället:

$result = mysql_query("SELECT namn, emejl, hemnr, mobnr FROM medlemmar ORDER BY namn DESC", $connection);

Sedan är det ju bara att byra ut namn mot det du vill att den ska sortera efter. :birp

Ha en bra helg allihopa.

Medlem sedan jan. 2003282 inlägg
#5

Ok
Jag har inte begripit vart i all värden den där strängen ORDER BY skulle skrivas.
Tack för hjälpen
Mvh
Jan-Olov

Medlem sedan jan. 2003282 inlägg
#6

Hej iegn, ny uppdatering på mitt lilla projekt. Tack jockelw för att du hjälpte mig på traven.
Koden ser nu ut så här, och sorterar mina data i den ordning jag vill. Nästa problem är att få in url och mailto i kolumn 1 och 2. Ja i kolumn ett måste formen vara <a href="medlemdb.php?id=2">Jan-Olov Sävhammar</a> hur lyckas jag med det?

	<?php
	include 'error.inc';
	include 'db.inc';
	
	// Visa Instruktörer i tabell
	function displayMedlem($result)
	{
	echo "<h1>SSDKs medlemmar</h1>";
	
	//Börja tabell med tabellhuvud
	echo "\n<table>\n<tr>\n" .
	     "\n\t<th><p class=datum>Namn</p></th>" .
	     "\n\t<th><p class=datum>Emejl</p></th>" .
	     "\n\t<th><p class=datum>Hem Nr</p></th>" .
	     "\n\t<th><p class=datum>Mob Nr</p></th>" .
	     "\n</tr>" .
	     "\n<tr>" .
	     "\n\t<td><b><u>Instruktörer</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row = @ mysql_fetch_row($result))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row som separata ID (tabell data)
		foreach($row as $data)
		echo "\n\t<td><p class=tab>$data &nbsp;</p></td>";
			
		//Avsluta rad
		echo "\n</tr>";
		}
	}
	
	$query = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='2-stjärnig instruktör CMAS' ORDER by namn";
	
	// Visa 3-stjärniga i tabell
	function displayMedlem1($result1)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>3-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row1 = @ mysql_fetch_row($result1))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row1 som separata ID (tabell data)
		foreach($row1 as $data1)
		echo "\n\t<td><p class=tab>$data1 &nbsp;</p></td>";
			
		//Avsluta rad
		echo "\n</tr>";
		}
	}
	
	$query1 = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='3-stjärnigt CMAS' ORDER by namn";
	
	// Visa 2-stjärniga i tabell
	function displayMedlem2($result2)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>2-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row2 = @ mysql_fetch_row($result2))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row2 som separata ID (tabell data)
		foreach($row2 as $data2)
		echo "\n\t<td><p class=tab>$data2 &nbsp;</p></td>";
			
		//Avsluta rad
		echo "\n</tr>";
		}
	}
	
	$query2 = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='2-stjärnigt CMAS' ORDER by namn";
	
	// Visa 1-stjärniga i tabell
	function displayMedlem3($result3)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>1-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row3 = @ mysql_fetch_row($result3))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row3 som separata ID (tabell data)
		foreach($row3 as $data3)
		echo "\n\t<td><p class=tab>$data3 &nbsp;</p></td>";
			
		//Avsluta rad
		echo "\n</tr>";
		}
	}
	
	$query3 = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='1-stjärnigt CMAS' ORDER by namn";

	// Visa fridykare i tabell
	function displayMedlem4($result4)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>Fridykare</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while ($row4 = @ mysql_fetch_row($result4))
		{
		//Starta tabell
		echo "\n<tr>";
	
		//Skriv ut alla attribut fron $row2 som separata ID (tabell data)
		foreach($row4 as $data4)
		echo "\n\t<td><p class=tab>$data4 &nbsp;</p></td>";
			
		//Avsluta rad
		echo "\n</tr>";
		}
	
	//Avsluta sedan tabellen
	echo "\n</table>\n";
	}
	
	$query4 = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='Fridykare' ORDER by namn";

			
	//Anslut till MySql servern
	if (!($connection = @ mysql_connect($hostName, $username, $password)))
	die("Kan ej ansluta");
	
	if (!(mysql_select_db("saladyk_se_db", $connection)))
	showerror();
	
	//Kör frågor på anslutningen
	if (!($result = @ mysql_query ($query, $connection)))
	showerror();
	if (!($result1 = @ mysql_query ($query1, $connection)))
	showerror();
	if (!($result2 = @ mysql_query ($query2, $connection)))
	showerror();
	if (!($result3 = @ mysql_query ($query3, $connection)))
	showerror();
	if (!($result4 = @ mysql_query ($query4, $connection)))
	showerror();
	
	//Visa resultatet
	displayMedlem($result);
	displayMedlem1($result1);
	displayMedlem2($result2);
	displayMedlem3($result3);
	displayMedlem4($result4);
		
	//Stäng anslutning
	if (!(mysql_close($connection)))
	showerror();
?>

Tack för hjälpen så långt.
Här är länkarna en en gång till hur det borde va och hur det ser ut.
Det skulle behöva se ut så här
http://medlem.spray.se/saladyk/link/medlemmar.php
men det jag får fram ser ut så här
http://medlem.spray.se/saladyk/link/medlemtest.php

Mvh
Jan-Olov

Medlem sedan jan. 2003282 inlägg
#7

Jag fick tips i ett annat forum när det gäller länkar, men jag får det inte att fungera. Det blir bara parse error hela tiden. Någon som ser vad jag gjort för fel?

	while($row = mysql_fetch_row($result))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row[4]."\">".$row[0]."</a></td>;
		echo "<td><a href=\"mailto:".$row[1]."\">".$row[1]."</a></td>; 
		echo "<td>".$row[2]."</td>"; 
		echo "<td>".$row[3]."</td>"; 
		echo "</tr>";
		}
	}
	
	$query = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='2-stjärnig instruktör CMAS' ORDER by namn";

Så här såg det ut förut

while ($row = @ mysql_fetch_row($result))
        {
        //Starta tabell
        echo "\n<tr>";
    
        //Skriv ut alla attribut fron $row som separata ID (tabell data)
        foreach($row as $data)
        echo "\n\t<td><p class=tab>$data &nbsp;</p></td>";
            
        //Avsluta rad
        echo "\n</tr>";
        }
    }
    
    $query = "SELECT namn, emejl, hemnr, mobnr FROM medlemmar WHERE cert='2-stjärnig instruktör CMAS' ORDER by namn";

Mvh
Jan-Olov

Medlem sedan jan. 2003282 inlägg
#8

Ja så kan det gå. Jag hittade felet när jag la ut minn senaste fråga.
Min slutgiltiga lösning ser ut som följer

	<?php
	include 'error.inc';
	include 'db.inc';
	
	// Visa Instruktörer i tabell 36
	function displayMedlem($result)
	{
	echo "<h1>SSDKs medlemmar</h1>";
	
	//Börja tabell med tabellhuvud
	echo "\n<table>\n<tr>\n" .
	     "\n\t<th><p class=datum>Namn</p></th>" .
	     "\n\t<th><p class=datum>Emejl</p></th>" .
	     "\n\t<th><p class=datum>Hem Nr</p></th>" .
	     "\n\t<th><p class=datum>Mob Nr</p></th>" .
	     "\n</tr>" .
	     "\n<tr>" .
	     "\n\t<td><b><u>Instruktörer</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array 52
	while($row = mysql_fetch_row($result))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row[4]."\">".$row[0]."</a></td>";
		echo "<td><a href=\"mailto:".$row[1]."\">".$row[1]."</a></td>"; 
		echo "<td>".$row[2]."</td>"; 
		echo "<td>".$row[3]."</td>"; 
		echo "</tr>";
		}
	}
	
	$query = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='2-stjärnig instruktör CMAS' ORDER by namn";
	
	// Visa 3-stjärniga i tabell
	function displayMedlem1($result1)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>3-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while($row1 = mysql_fetch_row($result1))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row1[4]."\">".$row1[0]."</a></td>";
		echo "<td><a href=\"mailto:".$row1[1]."\">".$row1[1]."</a></td>"; 
		echo "<td>".$row1[2]."</td>"; 
		echo "<td>".$row1[3]."</td>"; 
		echo "</tr>";
		}
	}
	
	$query1 = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='3-stjärnigt CMAS' ORDER by namn";
	
	// Visa 2-stjärniga i tabell
	function displayMedlem2($result2)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>2-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while($row2 = mysql_fetch_row($result2))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row2[4]."\">".$row2[0]."</a></td>";
		echo "<td><a href=\"mailto:".$row2[1]."\">".$row2[1]."</a></td>"; 
		echo "<td>".$row2[2]."</td>"; 
		echo "<td>".$row2[3]."</td>"; 
		echo "</tr>";
		}
	}
	
	$query2 = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='2-stjärnigt CMAS' ORDER by namn";
	
	// Visa 1-stjärniga i tabell
	function displayMedlem3($result3)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>1-stjärniga</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while($row3 = mysql_fetch_row($result3))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row3[4]."\">".$row3[0]."</a></td>";
		echo "<td><a href=\"mailto:".$row3[1]."\">".$row3[1]."</a></td>"; 
		echo "<td>".$row3[2]."</td>"; 
		echo "<td>".$row3[3]."</td>"; 
		echo "</tr>";
		}
	}
	
	$query3 = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='1-stjärnigt CMAS' ORDER by namn";

	// Visa fridykare i tabell
	function displayMedlem4($result4)
	{
	//Börja tabell med tabellhuvud
	echo "\n<tr>\n" .
	     "\n\t<td><b><u>Fridykare</u></b></td>" .
	     "\n</tr>";
	
	//Fetch en rad in i $row array
	while($row4 = mysql_fetch_row($result4))
		{
		echo "<tr>"; 
		echo "<td><a href=\"medlemdb.php?id=".$row4[4]."\">".$row4[0]."</a></td>";
		echo "<td><a href=\"mailto:".$row4[1]."\">".$row4[1]."</a></td>"; 
		echo "<td>".$row4[2]."</td>"; 
		echo "<td>".$row4[3]."</td>"; 
		echo "</tr>";
		}
	
	//Avsluta sedan tabellen
	echo "\n</table>\n";
	}
	
	$query4 = "SELECT namn, emejl, hemnr, mobnr, id FROM medlemmar WHERE cert='Fridykare' ORDER by namn";

			
	//Anslut till MySql servern
	if (!($connection = @ mysql_connect($hostName, $username, $password)))
	die("Kan ej ansluta");
	
	if (!(mysql_select_db("saladyk_se_db", $connection)))
	showerror();
	
	//Kör frågor på anslutningen
	if (!($result = mysql_query ($query, $connection)))
	showerror();
	if (!($result1 = mysql_query ($query1, $connection)))
	showerror();
	if (!($result2 = mysql_query ($query2, $connection)))
	showerror();
	if (!($result3 = mysql_query ($query3, $connection)))
	showerror();
	if (!($result4 = mysql_query ($query4, $connection)))
	showerror();
	
	//Visa resultatet
	displayMedlem($result);
	displayMedlem1($result1);
	displayMedlem2($result2);
	displayMedlem3($result3);
	displayMedlem4($result4);
		
	//Stäng anslutning
	if (!(mysql_close($connection)))
	showerror();
?>

Tack för visat intresse.
Om Ni vill se det slutliga resultatet så finns det här
http://medlem.spray.se/saladyk/link/medlemmar.php

Mvh
Jan-Olov

278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
149 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)