Avatar billede jens12 Nybegynder
13. juni 2006 - 14:27 Der er 19 kommentarer og
1 løsning

Hjælp til sortering

Hej, jeg er igang med et community og har fået lavet en venneliste...Den virker fint nok,Men jeg vil gerne have at den udskriver "vennernes status" i række følgen Online,Optaget,Ikke til stede,Offline..Jeg har prøvet med order by..Men det viker ikke..
kode:
<?php
  include("connect.php");

$pr_side = "12"; // Antal overskrifter pr side
if (!isset($s)) $s = "0";
$rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn'  AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error());
if(mysql_num_rows($rew_venneliste) < "1") {   
echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>";
} else {
while($row_venneliste = mysql_fetch_array($rew_venneliste)){
$status_venneliste = mysql_query("SELECT * FROM login WHERE brugernavn = '$row_venneliste[ven]'") or die(mysql_error());
while($s_venneliste = mysql_fetch_array($status_venneliste)){ 
if($s_venneliste['status'] == "Online")
  echo "<tr><td><img src=\"/grafik/online.gif\" border=\"0\" alt=\"Online\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Optaget")
  print"<tr><td><img src=\"/grafik/optaget.gif\" border=\"0\" alt=\"Optaget\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Ikke til stede!")
print"<tr><td><img src=\"/grafik/ikke.gif\" border=\"0\" alt=\"Ikke til stede!\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Offline")
print"<tr><td><img src=\"/grafik/offline.gif\" border=\"0\" alt=\"Offline\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";?>

<?
}
}
}
?>
Avatar billede beef12 Nybegynder
13. juni 2006 - 20:57 #1
Benyt evt. UNION

SELECT * FROM venneliste
WHERE brugernavn = '$brugernavn' 
AND godkendt = '1' LIMIT $s, $pr_side
AND status = 'Online'
UNION ALL
SELECT * FROM venneliste
WHERE brugernavn = '$brugernavn' 
AND godkendt = '1' LIMIT $s, $pr_side
AND status = 'Optaget'
UNION ALL
SELECT * FROM venneliste
WHERE brugernavn = '$brugernavn' 
AND godkendt = '1' LIMIT $s, $pr_side
AND status = 'Ikke til stede'
UNION ALL
//......
// OSV :-)


Men det er lidt af en quick 'n' dirty måde at gøre det på.


Du burde i virkelighed tilføje en ny tabel som eksempelvis hedder "vennestatus"
som indeholder status_id, status_navn og status_sort, som du fylder med data:

Online, 1
Offline, 2
Ikke til stede, 3
osv...

Derefter kan du gøre følgende:

SELECT *,  vennestatus.status_navn
FROM venneliste
inner join vennestatus
on venneliste.status_id = vennestatus.status_id

WHERE brugernavn = '$brugernavn' 
AND godkendt = '1' LIMIT $s, $pr_side
AND status = 'Ikke til stede'
ORDER BY
vennestatus.status_sort


Men hvis du ikke gider ændre på din datamodel må du bare benytte UNION - der kan bare få hen og blive meget tungt i længden, altså såfremt vennelisten er lang.
Avatar billede jens12 Nybegynder
13. juni 2006 - 22:19 #2
Det med union virker jo da status ikke ligger i tabelen venneliste,men i login tabelen!
Avatar billede jens12 Nybegynder
13. juni 2006 - 22:21 #3
Det med union virker jo ikke,da *
Avatar billede beef12 Nybegynder
13. juni 2006 - 23:10 #4
Ja ok - så kan du vel joine ud til login-tabellen og fiske status ud? Eller har jeg overset noget?


SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.ven
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Online'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.ven
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Offline'
LIMIT $s, $pr_side
...osv...
Avatar billede jens12 Nybegynder
14. juni 2006 - 20:08 #5
Nu ser min sql sån ud :
<?php
  include("connect.php");

$pr_side = "12"; // Antal overskrifter pr side
if (!isset($s)) $s = "0";
$rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn'  AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error());
if(mysql_num_rows($rew_venneliste) < "1") {   
echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>";
} else {
while($row_venneliste = mysql_fetch_array($rew_venneliste)){
$status_venneliste = mysql_query("SELECT * FROM venneliste
inner join login
on venneliste.ven = login.brugernavn
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Online'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.ven = login.brugernavn
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Optaget'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.ven = login.brugernavn
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Ikke til stede!'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.ven = login.brugernavn
AND brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Offline'
LIMIT $s, $pr_side
") or die(mysql_error());
while($s_venneliste = mysql_fetch_array($status_venneliste)){ 
if($s_venneliste['status'] == "Online")
  echo "<tr><td><img src=\"/grafik/online.gif\" border=\"0\" alt=\"Online\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Optaget")
  print"<tr><td><img src=\"/grafik/optaget.gif\" border=\"0\" alt=\"Optaget\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Ikke til stede!")
print"<tr><td><img src=\"/grafik/ikke.gif\" border=\"0\" alt=\"Ikke til stede!\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";
  if($s_venneliste['status'] == "Offline")
print"<tr><td><img src=\"/grafik/offline.gif\" border=\"0\" alt=\"Offline\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";?>

<?
}
}
}
?>
Men den siger :
Column: 'brugernavn' in on clause is ambiguous
Avatar billede beef12 Nybegynder
14. juni 2006 - 20:17 #6
husk at præfikse kolonnenavn med tabelnavn når kolonnenavnet optræder i flere tabeller, i dette tilfælde: venneliste.brugernavn
Avatar billede jens12 Nybegynder
14. juni 2006 - 21:07 #7
Okay..Så ser den sån ud
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Online'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Optaget'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Ikke til stede!'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Offline'
LIMIT $s, $pr_side
Men stadig fejl :
Column: 'brugernavn' in where clause is ambiguous
Avatar billede beef12 Nybegynder
14. juni 2006 - 21:17 #8
Jojo - men der står stadig "brugernavn = '$brugernavn'" - den skal præfikses...

SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Online'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Optaget'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Ikke til stede!'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Offline'
LIMIT $s, $pr_side


Grunden til at det ellers vil fejle er at brugernavn findes i 2 tabeller og databaseserven skal vide hvilken tabel du henviser til.
Avatar billede jens12 Nybegynder
14. juni 2006 - 21:45 #9
Okay nu viker sqlen..Men så er der opstået et nyt problem!
Nu udskriver den alle som Online :S
Avatar billede jens12 Nybegynder
14. juni 2006 - 21:48 #10
Det skal lige siges at jeg har ændret denne linje
while($s_venneliste = mysql_fetch_array($status_venneliste)){ 
til denne :
$s_venneliste = mysql_fetch_array($status_venneliste);
Avatar billede beef12 Nybegynder
14. juni 2006 - 22:03 #11
Din if-sætning er nu overflødig, du behøver kun skrive dette i din while-løkke:

echo '<tr><td><img src="/grafik/online.gif" border="0" alt="'.s_venneliste['status'].'"> - <a href="/community/profil.php?brugernavn=$row_venneliste[ven]" target="main">$row_venneliste[ven]</a></td></tr>';
Avatar billede jens12 Nybegynder
14. juni 2006 - 22:05 #12
Hvad så med dem der er Offline ?
Avatar billede beef12 Nybegynder
14. juni 2006 - 22:59 #13
Du får et dataset ud som indeholder alle brugere, du skal derfor indsætte s_venneliste['status'] alle de steder hvor der du har hårdkodet online, offline osv.

Jeg havde dog overset dine gif's, så prøv med følgende:

echo '<tr><td><img src="/grafik/'.s_venneliste['status'].'.gif" border="0" alt="'.s_venneliste['status'].'"> - <a href="/community/profil.php?brugernavn=$row_venneliste[ven" target="main">$row_venneliste[ven]</a></td></tr>';
Avatar billede jens12 Nybegynder
15. juni 2006 - 18:13 #14
Tjaa..Der er stadig et problem..
Når jeg går ind på en profil(kraller_man) så viser den alle som offline,men jeg (jens) er online..:S
Avatar billede beef12 Nybegynder
15. juni 2006 - 23:57 #15
Altså det sker når du klikker på et af brugerne fra den liste ovenstående genererer?

For så ligger jo problemet i den side du åbner (profil.php) og ikke den kode der står ovenover - og jeg kan af gode grunde ikke hjælpe dig, da jeg hverken kan se din kode eller GUI.
Avatar billede jens12 Nybegynder
17. juni 2006 - 16:12 #16
ALtså mig(jens) og den anden profil(kraller_man) er venner men da jeg går ind på den anden profil så genere den alle som online selvom jeg er online...Jeg tror der er noget gjaldt med sql sætningen..
Avatar billede beef12 Nybegynder
18. juni 2006 - 17:39 #17
Sql-sætningen er nu ikke specielt kompleks... jeg har svært ved at se hvorfor den på en eller anden mystisk måde skulle ændre alle personer til at have status = online.

Kig hellere efter din php-kode og stamdata igennem - mon ikke det i virkeligheden er der skoen trykker...

Det kan jeg ikke rigtig hjælpe dig med når jeg hverken kan se siden eller koden.
Avatar billede beef12 Nybegynder
21. juni 2006 - 11:20 #18
fandt du fejlen?
Avatar billede jens12 Nybegynder
01. juli 2006 - 16:23 #19
Undskyld,at jeg ikke har fået svaret dig endnu beef12...Men nej jeg har ikke fundet problemmet...
Hvis du vil have hele koden så er den her:(venner.php)
<? session_start(); ?>
<html>
<head>
<title>Untitled Document</title>
<link rel="stylesheet" href="/style/style.css" type="text/css">
<style type="text/css">
<!--
body {
    background-color: #FFFFFF;
}
-->
</style></head>

<body>
<table width="145" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div align="center"><a href="ansog.php?brugernavn=<?
$brugernavn = $_GET['brugernavn'];
echo"$brugernavn";?>">Ans&oslash;g om venskab </a></div></td>
</tr>
    <tr>
    <td><div align="center"><strong>Venner:</strong>
   
    </div></td>
  </tr><?php
  include("connect.php");
$brugernavn = $_GET['brugernavn'];
$pr_side = "12"; // Antal overskrifter pr side
if (!isset($s)) $s = "0";
$rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn'  AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error());
if(mysql_num_rows($rew_venneliste) < "1") {   
echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>";
} else {
while($row_venneliste = mysql_fetch_array($rew_venneliste)){
$status_venneliste = mysql_query("SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Online'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Optaget'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn'
AND godkendt = '1'
AND status = 'Ikke til stede!'
LIMIT $s, $pr_side
UNION ALL
SELECT * FROM venneliste
inner join login
on venneliste.brugernavn = login.brugernavn
WHERE venneliste.brugernavn = '$brugernavn' 
AND godkendt = '1'
AND status = 'Offline'
LIMIT $s, $pr_side
") or die(mysql_error());
while($s_venneliste = mysql_fetch_array($status_venneliste)){ 
echo '<tr><td><img src=\"/grafik/'.s_venneliste['status'].'.gif\" border=\"0\" alt=\"'.s_venneliste['status'].'\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>';
?>

<?
}
}
}
?>

    <tr>
      <td> <?
     
include("connect.php");
$brugernavn = $_GET['brugernavn'];
$count_total = mysql_query("SELECT count(id) AS total FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1'");
$total = mysql_result($count_total,0);
if ($s >= $pr_side) {
    $previous = $s-$pr_side;
    echo " <a href=\"venner.php?s=$previous&brugernavn=$brugernavn\">Forrige side</a> ";
} else {
    echo "";
}
echo "";
if ($total > $s+$pr_side) {
    $next = $s+$pr_side;
    echo " <a href=\"venner.php?s=$next&brugernavn=$brugernavn\">Næste side</a> ";
} else {
    echo "";
}
echo "";
?></td>
    </tr>


</table>
</body>
</html>
Avatar billede jens12 Nybegynder
21. oktober 2007 - 18:17 #20
Lukker,fandt aldrig løsningen :(
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
Computerworld tilbyder specialiserede kurser i database-management

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