Avatar billede rarw Nybegynder
18. oktober 2005 - 01:59 Der er 30 kommentarer og
2 løsninger

Vis brugere der er online øverst

Hey :D

jeg har tabellen online der indeholder bruger_id for den bruger der er logget ind

Så har jeg en anden tabel friend hvor der ser sådan her ud:

CREATE TABLE `friend` (
  `id` int(11) NOT NULL auto_increment,
  `fra` int(11) NOT NULL default '0',
  `til` int(11) NOT NULL default '0',
  `godkendt` set('yes','no') NOT NULL default '',
  PRIMARY KEY  (`id`)
)

Og jeg kan godt finde ud af at udskrive vennerne fra et $_GET[id] :D men vil gerne have at hvis de er på online listen skal de vises øverst og der skal stå ON uden foran deres navn :)

Vil i hjælpe :D?
Avatar billede coderdk Praktikant
18. oktober 2005 - 04:14 #1
SELECT f.*, o.id FROM friend f LEFT OUTER JOIN online o ON f.id = o.id ORDER BY o.id, f.id

Hvis o.id er NULL er de ikke online ;)
Avatar billede rarw Nybegynder
18. oktober 2005 - 05:27 #2
Altså hvordan skal min query så se ud :D?

Sådan ser den ud nu :p :

$conn = mysql_query("SELECT * FROM friend WHERE (til = '".$_GET['id']."' OR fra = '".$_GET['id']."') AND godkendt = 'yes' ORDER BY id DESC");

Kan du sætte det ind og sige hvad jeg ellers skal gøre :)?
Avatar billede coderdk Praktikant
18. oktober 2005 - 12:46 #3
Noget i stil med:

$sql = "
    SELECT
        f.*
        ,o.bruger_id
    FROM
        friend f
    LEFT OUTER JOIN
        online o
    ON
        f.id = o.bruger_id
    WHERE
        (f.til = '".$_GET['id']."'
        OR f.fra = '".$_GET['id']."')
        AND f.godkendt = 'yes'
    ORDER BY
        o.bruger_id
        ,f.id DESC
    ";
$conn = mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows( $conn ) > 0 )
{
  while ( $row = mysql_fetch_assoc( $conn ) )
  {
      echo "Brugerid $row[id]";
      if ( !is_null( $row['bruger_id'] ) )
      {
        echo " ONLINE";
      }
      echo "<br>";
  }
}
else
{
  echo "Ingen brugere...";
}
Avatar billede rarw Nybegynder
18. oktober 2005 - 16:24 #4
Så det viser både venner der er Online øverst og bare alle de andre brugere?
Avatar billede coderdk Praktikant
18. oktober 2005 - 16:27 #5
Den viser alle brugerens venner, dem der er online enten øverst eller nederst - Jeg kan ikke lige huske hvilken, men det kan vendes om ved at ændre ORDER BY o.bruger_id til ORDER BY o.bruger_id DESC hvis den viser det forkert...
Avatar billede unsafe Nybegynder
18. oktober 2005 - 16:59 #6
Der kommer ingen fejl, men heller ingen brugere :/
Avatar billede unsafe Nybegynder
18. oktober 2005 - 17:00 #7
Hjælper ham over msn, og der kommer bare en blank side.
Avatar billede coderdk Praktikant
18. oktober 2005 - 17:02 #8
Prøv at sætte nogle echo'er ind hist og her og se hvor langt den kommer, og hvor den kommer ind henne...
Avatar billede rarw Nybegynder
18. oktober 2005 - 17:14 #9
Kan du give eksempel :D?
Avatar billede coderdk Praktikant
18. oktober 2005 - 17:19 #10
evt efter if ( mysql_num_rows( $conn ) > 0 )
skriv: echo 'Er inde i if-sætningen'; eller sådan noget - forskellige steder så vi kan se hvor den kommer omkring :PO
Avatar billede rarw Nybegynder
18. oktober 2005 - 18:28 #11
Vi har ændret lidt i koden og navne på tabellerne og felterne:

CREATE TABLE `venneliste` (
  `id` int(11) NOT NULL auto_increment,
  `to_user` int(11) NOT NULL default '0',
  `from_user` int(11) NOT NULL default '0',
  `date` longtext NOT NULL,
  `godkendt` set('yes','no') NOT NULL default '',
  `to_user_kommentar` varchar(255) NOT NULL default '',
  `from_user_kommentar` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
)

CREATE TABLE `online_profiles` (
  `date` int(11) NOT NULL default '0',
  `brugernavn` varchar(25) default NULL,
  `page` varchar(255) default NULL,
  `user_id` int(11) NOT NULL default '0'
)

Og her har vi den kode der bare ikke viser noget :P :

<?php

$coll1 = mysql_query("SELECT * FROM venneliste WHERE (to_user = '".$_GET['id']."' OR from_user = '".$_GET['id']."') AND godkendt = 'yes' ORDER BY id DESC");

if(mysql_num_rows($coll1) == 0) { print "<br /><center><b>$rs3[brugernavn] har desværre ingen venner :-(.</b><br /> Men du kunne jo blive det første ? ;-)</center>"; } else {

$conn = mysql_query("SELECT * FROM users WHERE brugernavn = '$_SESSION[brugernavn]'");
$rs = mysql_fetch_array($conn);


$sql = "
    SELECT
        f.*
        ,o.user_id
    FROM
        venneliste f
    LEFT OUTER JOIN
        online_profiles o
    ON
        f.id = o.user_id
    WHERE
        (f.to_user = '".$_GET['id']."'
        OR f.from_user = '".$_GET['id']."')
        AND f.godkendt = 'yes'
    ORDER BY
        o.user_id
        ,f.id DESC LIMIT $vis_fra, $pr_side";
?>


<table border="0" cellpadding="2" cellspacing="0" width="100%">
<?php
while ($rs2 = mysql_fetch_array($sql)) {

$conn11 = mysql_query("SELECT * FROM users WHERE id = '$rs2[to_user]'");
$rs11 = mysql_fetch_array($conn11);

$conn22 = mysql_query("SELECT * FROM users WHERE id = '$rs2[from_user]'");
$rs22 = mysql_fetch_array($conn22);

?>
<?php if($rs2["from_user"] == $_GET["id"]) { ?>
<tr>
    <td style="width: 100%; border-bottom: 1px solid #D3FFA8"><a href="profil.php?id=<?=$rs11["id"];?>" target="_parent"><b><?=$rs11["brugernavn"];?></b></a> <?=$kon1;?><?=$age1;?></td>
</tr>
<?php } else { ?>
<tr>
    <td style="width: 100%; border-bottom: 1px solid #D3FFA8"><a href="profil.php?id=<?=$rs22["id"];?>" target="_parent"><b><?=$rs22["brugernavn"];?></b></a> <?=$kon2;?><?=$age2;?></td>
</tr>
<?php } } } ?>

</table>


<?php if(mysql_num_rows($coll1) > 14) { ?>

<br />

<?php

HAR SIDE SKIFT HER

}

?>

Hjælp :D?
Avatar billede coderdk Praktikant
18. oktober 2005 - 18:34 #12
Du laver ikke nogen query...

Efter:

$sql = "
    SELECT
        f.*
        ,o.user_id
    FROM
        venneliste f
    LEFT OUTER JOIN
        online_profiles o
    ON
        f.id = o.user_id
    WHERE
        (f.to_user = '".$_GET['id']."'
        OR f.from_user = '".$_GET['id']."')
        AND f.godkendt = 'yes'
    ORDER BY
        o.user_id
        ,f.id DESC
    LIMIT
        $vis_fra, $pr_side";

laves:

$qh = mysql_query( $sql ) or die( mysql_error() );

og

while ($rs2 = mysql_fetch_array($sql)) {

laves om til:

while ($rs2 = mysql_fetch_array($qh)) {
Avatar billede rarw Nybegynder
18. oktober 2005 - 18:49 #13
Yep, nu vises de :D

Men dem der er online vises ikke øverst, det er bare præcis som før :P?
Avatar billede coderdk Praktikant
18. oktober 2005 - 19:03 #14
Hmm lyder underligt, prøve lige dette - jeg har fjernet to unødvendige queries og integreret dem i den anden:

<?php

$coll1 = mysql_query("SELECT * FROM venneliste WHERE (to_user = '".$_GET['id']."' OR from_user = '".$_GET['id']."') AND godkendt = 'yes' ORDER BY id DESC");

if(mysql_num_rows($coll1) == 0) { print "<br /><center><b>$rs3[brugernavn] har desværre ingen venner :-(.</b><br /> Men du kunne jo blive det første ? ;-)</center>"; } else {

$conn = mysql_query("SELECT * FROM users WHERE brugernavn = '$_SESSION[brugernavn]'");
$rs = mysql_fetch_array($conn);


$sql = "
    SELECT
        f.*
        ,t.brugernavn as tilbruger
        ,fra.brugernavn as frabruger
        ,o.user_id
    FROM
        venneliste f
    INNER JOIN
        users t
    ON
        f.to_user = t.id
    INNER JOIN
        users fra
    ON
        f.from_user = fra.id
    LEFT OUTER JOIN
        online_profiles o
    ON
        f.id = o.user_id
    WHERE
        (f.to_user = '".$_GET['id']."'
        OR f.from_user = '".$_GET['id']."')
        AND f.godkendt = 'yes'
    ORDER BY
        o.user_id
        ,f.id DESC
    LIMIT
        $vis_fra, $pr_side";
$qh = mysql_query( $sql ) or die( mysql_error() );

?>


<table border="0" cellpadding="2" cellspacing="0" width="100%">
<?php
while ($rs2 = mysql_fetch_array($qh)) {

?>
<?php if($rs2["from_user"] == $_GET["id"]) { ?>
<tr>
    <td style="width: 100%; border-bottom: 1px solid #D3FFA8"><a href="profil.php?id=<?=$rs2["to_user"];?>" target="_parent"><b><?=$rs2["tilbruger"];?></b></a> <?=$kon1;?><?=$age1;?></td>
</tr>
<?php } else { ?>
<tr>
    <td style="width: 100%; border-bottom: 1px solid #D3FFA8"><a href="profil.php?id=<?=$rs2["from_user"];?>" target="_parent"><b><?=$rs2["frabruger"];?></b></a> <?=$kon2;?><?=$age2;?></td>
</tr>
<?php } } } ?>

</table>


<?php if(mysql_num_rows($coll1) > 14) { ?>

<br />

<?php

HAR SIDE SKIFT HER

}

?>
Avatar billede rarw Nybegynder
18. oktober 2005 - 19:17 #15
Okey :D

Men nope stadig ikke, på min venneliste er der en bruger der er logget ind, men han står ikke øverst :(
Avatar billede coderdk Praktikant
18. oktober 2005 - 19:23 #16
Står han nederst?
Avatar billede rarw Nybegynder
18. oktober 2005 - 19:48 #17
Nope, bare samme sted som før :(
Avatar billede coderdk Praktikant
18. oktober 2005 - 22:23 #18
Prøv lige at ændre

ORDER BY
        o.user_id
        ,f.id DESC

til bare

ORDER BY
        o.user_id

Evt. med DESC efter
Avatar billede coderdk Praktikant
18. oktober 2005 - 22:36 #19
Evt. prøv:

$sql = "
    SELECT
        f.*
        ,t.brugernavn as tilbruger
        ,fra.brugernavn as frabruger
        ,IF( o.user_id IS NULL, 0, 1 ) as online
    FROM
        venneliste f
    INNER JOIN
        users t
    ON
        f.to_user = t.id
    INNER JOIN
        users fra
    ON
        f.from_user = fra.id
    LEFT OUTER JOIN
        online_profiles o
    ON
        f.id = o.user_id
    WHERE
        (f.to_user = '".$_GET['id']."'
        OR f.from_user = '".$_GET['id']."')
        AND f.godkendt = 'yes'
    ORDER BY
        online
        ,f.id DESC
    LIMIT
        $vis_fra, $pr_side";
Avatar billede rarw Nybegynder
18. oktober 2005 - 22:49 #20
Har prøvet med begge ting.

Her er der et screen shot:

www.unsafe.dk/se2.jpg
Avatar billede coderdk Praktikant
18. oktober 2005 - 23:00 #21
Prøv lige efter:

while ($rs2 = mysql_fetch_array($qh)) {

at skrive:

echo "<pre>"; var_dump( $rs2 ); echo "</pre>";

For jeg tror nu den virker, af en eller anden grund ;P
Avatar billede rarw Nybegynder
18. oktober 2005 - 23:26 #22
Den udskriver NULL :p
Avatar billede rarw Nybegynder
18. oktober 2005 - 23:41 #23
Skal jeg lige poste tabellerne ?
Avatar billede rarw Nybegynder
18. oktober 2005 - 23:42 #24
Eller nej har jeg gjort :D
Avatar billede coderdk Praktikant
18. oktober 2005 - 23:49 #25
Hvis du har brugt SQL'en fra 18/10-2005 19:03:55 skal den skrive NULL for "o.user_id" feltet hvis brugeren ikke er online...
Har du brugt SQL'en fra 18/10-2005 22:36:11 skal den aldrig skrive NULL men enten 0 eller 1 i "online" feltet...
Avatar billede rarw Nybegynder
19. oktober 2005 - 00:39 #26
Ja jeg brugt den fra 18/10-2005 22:36:11.
Men hvad gør jeg så :o?
Avatar billede coderdk Praktikant
19. oktober 2005 - 18:34 #27
Sorry, don't know - Så vidt jeg kan se burde det virke.
Avatar billede rarw Nybegynder
19. oktober 2005 - 19:10 #28
Okey, vil du så stadig have dine points o:?
Avatar billede coderdk Praktikant
19. oktober 2005 - 20:25 #29
Næh, ikke hvis det jeg har lavet, ikke virker som det skal - Også selvom mine små optimeringer måske er lidt værd ;) Tag dem bare selv, hvis der ikke er andre der kommer med løsningen...
Avatar billede rarw Nybegynder
19. oktober 2005 - 22:29 #30
Nah, vi deler dem sku bare, jeg takker for din indsats ;)

Smid et svar :D
Avatar billede coderdk Praktikant
19. oktober 2005 - 22:33 #31
Tag mindst 100 pts selv, så :) Takker
Avatar billede rarw Nybegynder
20. oktober 2005 - 01:34 #32
Såden ;)

Tak igen :), jeg prøver bare et oprette et nyt og håbe på det kan blive løst :D
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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