Avatar billede spidr Nybegynder
18. februar 2005 - 13:57 Der er 20 kommentarer og
1 løsning

Hente i én sql database og sortere efter en anden

Hej eskperter, jeg har sidet og arbejdet på et topliste script stort set hele ferien, men nu kan jeg ikke rigtigt komme videre, så taenkte om nogen af jer gutter ikke ku hjaelpe :)

Som i kan se på
http://www.goog.dk/toplisten.php

går den ind og henter alle brugerne og sortere efter dem der har sendt flest hits til os, noget lignene det vil jeg gerne lave bare med hvem der har flest online, selve counter systemet og alt det har jeg lavet.

Problemet er at online.sql og brugere.sql er 2 forskelige :D
Det jeg så vil have er at brugere bliver hentet, og derefter sorteret efter hvem der har felst online :D


brugere:
CREATE TABLE linkindex (
  id int(11) NOT NULL auto_increment,
  http varchar(255) NOT NULL default '',
  navn varchar(255) NOT NULL default '',
  mail varchar(255) NOT NULL default '-',
  pass varchar(10) NOT NULL default '-',
  alt varchar(255) NOT NULL default '',
  dl int(9) NOT NULL default '0',
  unidl int(9) NOT NULL default '0',
  unidlind int(9) NOT NULL default '0',
  hits int(9) NOT NULL default '0',
  cat varchar(255) NOT NULL default '',
  banner varchar(255) NOT NULL default '-',
  eks int(9) NOT NULL default '0',
  dato int(9) NOT NULL default '20050103',
  Udlob int(8) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM

online:
CREATE TABLE online_OTHER (
  id int(11) NOT NULL auto_increment,
  ip varchar(255) NOT NULL default '',
  date int(11) NOT NULL default '0',
  page int(11) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM

henter brugere sådan her:
$query = mysql_query("select * from linkindex where cat LIKE 'Sex%' order by unidlind desc, dl desc limit 100") or die(mysql_error());

Henter online sådan her:
$countusers = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_OTHER where page = $ad"));
$Online = $countusers[total];



så det den egentligt skal er at hente alle brugere, og så se hvem der har det højeste $online, og så sortere efter det :D

Håber nogen af jer kan hjaelpe :D Plejer i jo at kunne når man er på bar bund :D
Avatar billede detox Nybegynder
18. februar 2005 - 14:06 #1
Er der nogle felter der forbinder de 2 tabeller?
Avatar billede spidr Nybegynder
18. februar 2005 - 14:14 #2
ja id :)

den der hedder page i online_OTHER
er den der hedder ID i den anden :)

Skulle jeg sefølig have sagt :D
Avatar billede spidr Nybegynder
18. februar 2005 - 14:14 #3
$countusers = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_OTHER where page = $ad"));

<--skulle sefølig have vaeret

$countusers = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_OTHER where page = $id"));
Avatar billede detox Nybegynder
18. februar 2005 - 14:26 #4
Måske sådan her:

SELECT l.navn, count(*) AS total FROM linkindex l, online_other o WHERE o.page=l.id GROUP BY o.page
Avatar billede detox Nybegynder
18. februar 2005 - 14:28 #5
Nå ja, sorteret med flest øverst:

SELECT l.navn, count(*) AS total FROM linkindex l, online_other o WHERE o.page=l.id GROUP BY o.page ORDER BY total DESC
Avatar billede spidr Nybegynder
18. februar 2005 - 14:29 #6
har aldrig set det der før :S

hva er alle de I og O'er for ngoet?

Slet ik med, det må du undskylde, suntes ellers jeg plejer at vaere meget godt med i php :S
Avatar billede detox Nybegynder
18. februar 2005 - 14:30 #7
l og o er forkortelse af tabelnavnene. Kan du ikke prøve at teste det?
Avatar billede detox Nybegynder
18. februar 2005 - 14:32 #8
For en ordens skyld 'l' er et lille 'L'
Avatar billede spidr Nybegynder
18. februar 2005 - 14:34 #9
ja, så jeg os lige, men kan godt bare bruge l og o? jeg skal ik skrive det hele?

lol har jeg aldrig set før :D
Avatar billede detox Nybegynder
18. februar 2005 - 14:36 #10
Når man skriver: "FROM linkindex l, online_other o", angiver man l og o som forkortelser man kan bruge andre steder i forespørgslen. Det gør det lidt nemmere end at skrive hele tabelnavnet hver gang.
Avatar billede detox Nybegynder
18. februar 2005 - 14:38 #11
Men du må da gerne skrive det hele ;O)

SELECT linkindex.navn, count(*) AS total FROM linkindex, online_other WHERE online_other.page=linkindex.id GROUP BY online_other.page ORDER BY total DESC
Avatar billede spidr Nybegynder
18. februar 2005 - 14:39 #12
<?

include("../xxxxx.login");
$id = strip_tags($id);
$query = mysql_query("SELECT l.navn, count(*) AS total FROM linkindex l, online_OTHER o WHERE o.page=l.id GROUP BY o.page ORDER BY total DESC limit 5") or die(mysql_error());
$i = 1;

$time            = explode(" ", microtime());

$usersec        = (double)$time[1];
mysql_query("DELETE FROM online_OTHER WHERE date < $usersec -400");


while($row = mysql_fetch_array($query)){
$ad = $row[id];


$countusers    = mysql_fetch_array(mysql_query("SELECT count(*) as total FROM online_OTHER where page = $ad"));

$Online = $countusers[total];


echo "<tr";
if($row[id] == $id) { echo" bgcolor=\"#cccccc\""; }
echo"><td valign=top>$i. </td><td><a href=\"http://www.goog.dk/link/?id=$row[id]\" target=_blank><img src=\"$row[banner]\" onerror=\"indsaetTekst(this)\" width=468 height=60 border=0 alt=\"$row[navn] - $row[alt]\"></a></td><td valign=top align=right>$Online</td><td valign=top align=right><a href=topstats.php?id=$row[id]><img src=banners/stats.png border=0></a></td></tr>";
$i ++;
}
?>


ser sådan her ud:

http://www.goog.dk/toplistenonline.php
Avatar billede spidr Nybegynder
18. februar 2005 - 14:40 #13
wow super fedt, tak for de, vidste jeg slet ik :)
Avatar billede spidr Nybegynder
18. februar 2005 - 14:41 #14
ok kan godt selv se den er helt gal.. lol 2 sec
Avatar billede spidr Nybegynder
18. februar 2005 - 14:43 #15
kan godt se den er helt gal, men sQ ik lige hvordan jeg retter i det du skrev.. men den skal vel ned :S
Avatar billede detox Nybegynder
18. februar 2005 - 14:53 #16
Den helt korte udgave er:

<?
include("../xxxxx.login");
$query = mysql_query("SELECT l.id,l.navn,l.alt, count(*) AS total FROM linkindex l, online_OTHER o WHERE o.page=l.id GROUP BY o.page ORDER BY total DESC limit 5") or die(mysql_error());
$i = 1;
echo "<table>";
while($row = mysql_fetch_array($query)){
echo "<tr><td>$i. </td><td>$row[navn] - $row[alt]</td><td>$row[total]</td></tr>";
$i ++;
}
echo "</table>";
?>
Avatar billede detox Nybegynder
18. februar 2005 - 14:54 #17
Prøv at teste om det fungerer?
Avatar billede spidr Nybegynder
18. februar 2005 - 15:01 #18
jah så virker det vidst, problemet med den er bare lidt at den kun hvis dem hvor der rent faktisk er nogen online, men er vel os det bedste :)
tak for det :)
Avatar billede spidr Nybegynder
18. februar 2005 - 15:01 #19
http://www.goog.dk/toplistenonline.php
<-hvis du vil se resultatet :D
Avatar billede detox Nybegynder
18. februar 2005 - 15:08 #20
Velbekommen, det ser ok ud :O)
Avatar billede spidr Nybegynder
18. februar 2005 - 15:16 #21
Ok :P
Det ser super fedt ud :D:D tak mester :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