Gå til innhold

sortere resultat i mysqlspørring...


Anbefalte innlegg

$query = "SELECT * FROM venneliste WHERE bruker LIKE '".$bruker_id."' ORDER BY venn";

 

poenget er at venn som det skal sorteres etter, er et nummer, som tilsvarer id til personen. Derfor må jeg ut og hente navnet med denne i en while-løkke:

 

SELECT * FROM brukere WHERE venn LIKE '".$venn_id."'");

 

da blir følgelig listen sortert etter nummeret, men jeg kunne tenke meg å sortere etter navnet, ikke id. noen som forsto ;)

Lenke til kommentar
Videoannonse
Annonse

Nå er ikke jeg noen "reser" på å kjøre et query mot flere tabeller, men prøv noe slikt:

"SELECT * FROM venneliste, brukere WHERE venneliste.bruker LIKE '".$bruker_id."' ORDER BY venneliste.venn"; 

 

Mulig jeg er helt på bærtur, men det er verdt et forsøk :)

Endret av ZoRaC
Lenke til kommentar

Join tabellene i spørringen!

 

Forklar hvilke felter du har i tabellene, hvilke som er like i begge (id felter) og hvilket felt du vil sortere etter - så kan vi sikkert sette opp en join spørring for deg, hvis du ikke kan det.

 

Hvis du vil prøve deg frem, så virker det som du kan bruke LEFT JOIN!

Lenke til kommentar

tusen takk :thumbs:

 

Tabell venneliste:

 

id // unik

bruker // id til brukernavnet

venn // id til vennen til brukernavnet

 

 

Tabell brukere

id // unik, men har ingen ting til felles med id i tabell venneliste, men venn.

brukernavn // navn på alle venner

 

 

Eksempel tabell venneliste:

 

1. 12 - 42 // nr. 42 står på vennelista til 12

2. 12 - 96 // nr. 96 står på vennelista til 12

3. 42 - 34 // nr. 34 står på vennelista til 42

 

når jeg har hentet ut hvilke venner hver enkelt bruker har, sorteres de i stigende rekkefølge etter id'en de har i tabell venneliste. Jeg ønsker å hente ut brukernavnet etter tabell brukere, og sortere de alfabetisk istedenfor. er det mulig ? :innocent:

 

EDIT: Feil smily...

Endret av fjartan
Lenke til kommentar

Jeg er ikke helt sikker på hva du mener? Vil du hente ut alle brukre og tilhørende data i venneliste? I så fall kan du bruke denne:

 

SELECT * FROM brukere LEFT JOIN venneliste ON venneliste.venn = brukere.id ORDER BY brukere.brukernavn

 

Er det ikke dette du mener, så beskriv litt nærmere hvilken data du ønsker. Kom med et eksempel på feltene og data'en du ønsker.

Lenke til kommentar

vanskelig å forklare det bedre, slik jeg gjør det i dag, henter jeg ut alle brukerene:

 

NAVN VENNER

Martin

Merethe Martin Merethe

Mia Martin

 

Men det er ikke poenget. Poenget er at de (vennene) sorteres etter deres nummer i tabell Venneliste, fordi de ligger lagret med sin id og ikke navn (for å unngå problemer hvis folk sletter sin profil og andre kommer inn med samme brukernavn). Derfor må jeg hente navnet deres ved å finne deres id i tabell brukernavn. Dette gjøres i while-løkka til den første spørringen - altså spørringen etter id'ene til alle vennene til hver bruker.

Slik foregår det i dag:

 

function vis_venneliste() 
{ 
$bruker_id = $_SESSION['sypher'];
$query = "SELECT * FROM venneliste WHERE bruker LIKE '".$bruker_id."' ORDER BY venn";  // HER SORTERES DEN ETTER ID PÅ VENN
$result = mysql_query($query); 
$number = mysql_num_rows($result); 
$i = 0; 
if ($number == 0) : 
  print "<tr><td colspan=3 bgcolor=\"#F5F0F0\"><i>Du har ikke lagt noen til i vennelisten din.</i></td></tr>"; 
elseif ($number > 0) : 
      while ($i < $number): 

            $bruker = mysql_result($result,$i,"bruker"); 
            $venn_id = mysql_result($result,$i,"venn"); 

$venn_result = mysql_query("SELECT * FROM brukere WHERE sypher LIKE '".$venn_id."'"); // MEN JEG VIL SORTERE DEN ETTER SVARET AV DENNE SPØRRINGEN

$venn = mysql_result($venn_result,0,"brukernavn");



            $i++; 
      endwhile; 

endif; 

} 

Endret av fjartan
Lenke til kommentar

Hvis jeg forstår deg rett vil du hente ut vennene til en bestemt bruker fra tabellen venneliste. Videre ønsker du å hente ut navnene til vennene og sortere etter disse navnene.

 

I tabellen venneliste har du f.eks. følgende felter: id, bruker og venn - der id er f.eks. et auto_increment felt som bare fungerer som id for tabellen, bruker er den personen som har vennene lagt til i listen og venn sier hvilken venn han/hun har. Dersom en person har flere venner legges det til en ny rad med id, bruker og venn.

F.eks. her er all data der brukeren er # 5:

 

04 - 5 - 10

11 - 5 - 57

15 - 5 - 60

 

Her er bruker 5 venn med bruker 10, 57 og 60.

 

Videre har du en tabell som holder info om navnet på brukerene, med f.eks. følgende felter: id og brukernavn. id er linket til venn i tabellen venneliste

 

Stemmer dette?

 

I så fall kan du kjøre en spørring som dette:

 

SELECT * FROM venneliste LEFT JOIN brukere ON venneliste.venn = brukere.id WHERE venneliste.bruker = '5' ORDER BY brukernavn

 

Da vil du få opp et resultat som dette:

+----+--------+------+------+------------+
| id | bruker | venn | id   | brukernavn |
+----+--------+------+------+------------+
| 12 |      5 |    3 |    3 | Askepott   |
| 10 |      5 |    1 |    1 | Nissen     |
| 11 |      5 |    2 |    2 | Trollet    |
+----+--------+------+------+------------+

 

Der er alle vennene til bruker hentet og sortert etter brukernavnet.

Lenke til kommentar

Glem ikke at MySQL ofte har et problem med det norske alfabetet. Alle bokstavene fra a-z kommer på rett plass men ikke æ ø å - de kommer i rekkefølgen å æ ø (akuratt som i det svenske alfabetet). Den enkleste måten å fikse dette problemet er å bruke CASE og byttet ut æ med å, ø med æ og å med ø.

 

F.eks.:

SELECT * FROM tabell ORDER BY CASE felt

WHEN 'æ' THEN 'å'

WHEN 'ø' THEN 'æ'

WHEN 'å' THEN 'ø'

ELSE felt END;

 

Mange som glemmer dette, og oppdager problemet først når de får klagemail!

Lenke til kommentar
  • 2 uker senere...

Dette fungerer ikke. ??????? har jeg misforstått noe, hvor er feilen(e)?

 

$query = "SELECT * FROM venneliste WHERE bruker LIKE '".$bruker_id."' ORDER BY venn"; 

$result = mysql_query($query); 
$number = mysql_num_rows($result); 
$i = 0; 
if ($number == 0) : 
  print "<tr><td colspan=3 bgcolor=\"#F5F0F0\"><i>Du har ikke lagt noen til i vennelisten din.</i></td></tr>"; 
elseif ($number > 0) : 
      while ($i < $number): 

$sorter = mysql_query("SELECT * FROM venneliste LEFT JOIN brukere ON venneliste.venn = brukere.id WHERE venneliste.bruker = '$bruker_id' ORDER BY brukere.brukernavn");

            $bruker = mysql_result($sorter,$i,"bruker"); 
            $venn = mysql_result($sorter,$i,"venn"); 


$tid = mysql_result($sorter,0,"sistinnlogget");

            print "<tr><td bgcolor=\"#F5F0F0\"><a href=\"index.php?locat=profil&id=$venn\" class=\"link\">$venn</td><td width=10 bgcolor=\"#F5F0F0\" align=\"center\" valign=\"middle\"><center><a href=\"index.php?locat=venneliste&action=del&navn=$venn\" class=\"link\">DEL</a>|<a href=\"index.php?locat=meldingny&navn=$venn\" class=\"link\">PMS</a>|<a href=\"index.php?locat=meldingny&navn=$venn&action=dagbok\" class=\"link\">VLS</a></center></td><td width=70 bgcolor=\"#F5F0F0\" align=\"center\" valign=\"middle\">";



if ($tid > time() - 900) {
echo "<font color=green size=1><b>Pålogget nå!</b></font></td></tr>"; 
} else {
echo date("d/m H:i",$tid);
}

echo "</td></tr>";


            $i++; 
      endwhile; 

endif; 

Lenke til kommentar

Ved å bruke mysql_result henter du kun ut en bestemt celle.

 

$sorter = mysql_query("SELECT * FROM venneliste LEFT JOIN brukere ON venneliste.venn = brukere.id WHERE venneliste.bruker = '$bruker_id' ORDER BY brukere.brukernavn");

if(mysql_num_rows($sortere) <= 0){
 echo "Du har ikke lagt til noen venner i venneliste din";
}else{
 while($rad = mysql_fetch_array($sorter)){
   echo $rad['DeVerdieneDuVilVise'];
 }
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...