Avatar billede snorres Nybegynder
16. december 2004 - 09:17 Der er 29 kommentarer og
1 løsning

Alle med samme navn ligges sammen fra en sql forespørgsel

Jeg har følgende stykke kode til at hente alle mine besøgs tal i en database og dele dem op på siden som jeg har lavet et link til her under.
Men det jeg så gerne vil er at alle med samme navn ligges sammen, kan det lade sig gøre? og hvordan?
sådan at alle med navnet:
Ikke navngivet!  - bliver til, goog.dk og den taller alle deres hits sammen?
og alle med navnet:
GooG.dk - Picture Site    - bliver til goog.dk/pics ?
og alle med:
goog.dk - Make you own pics.  - bliver til goog.dk/pic?
osv?

http://www.goog.dk/portal/sidetop.php

<table>

<tr><td valign=top><b>Name:</b></td><td><b>Hits</b></td><td><b>Hits/day</b></td></tr>

<?php

include("../db_ind.inc");

$foresp = mysql_query("SELECT * FROM stats ORDER by hits desc LIMIT 100");

while($row = mysql_fetch_array($foresp)) {

$tid = "20041216"; // YYYYMMDD
$mytime = strtotime($tid);
$now = time();
$diff = $now-$mytime;
$dage = floor($diff/(60*60*24));
if ($dage < 2) {$dage = 2;}
$day = $row[hits] / $dage;
$day = round($day, 1);


echo"<tr><td><a href=$row[url] target=_blanc>$row[navn] &nbsp;&nbsp;</a></td><td>$row[hits] &nbsp;&nbsp;</td><td>$day</td></tr>";

}

?>

</table>
Avatar billede coderdk Praktikant
16. december 2004 - 09:58 #1
Prøv med:

SELECT SUM(hits) AS samlet, s.* FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100

Bemærk at dit link jo så ikke vil virke (url) - Den vil pege på en af dem, så vidt jeg lige kan se...
Avatar billede coderdk Praktikant
16. december 2004 - 09:59 #2
Gah:

SELECT SUM(hits) AS samlet, * FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100
Avatar billede Slettet bruger
16. december 2004 - 11:40 #3
SELECT SUM(hits) AS samlet * FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100

behøver du "," før * ?
Avatar billede coderdk Praktikant
16. december 2004 - 16:41 #4
wicez, ja det mener jeg bestemt ;)
Avatar billede snorres Nybegynder
17. december 2004 - 08:43 #5
kan man ikke lave noget der bestemmer at dem med et bestemt navn har en bestemt URL?
så, som jeg prøvede at forklare,
alle med navnet:
GooG.dk - Picture Site    - bliver til goog.dk/pics ?
og alle med:
goog.dk - Make you own pics.  - bliver til goog.dk/pic?
osv?
Avatar billede snorres Nybegynder
17. december 2004 - 11:33 #6
Den virker ikke :(
http://www.goog.dk/portal/sidetop.php

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /customers/goog.dk/goog.dk/httpd.www/portal/sidetop.php on line 30
Avatar billede coderdk Praktikant
17. december 2004 - 15:49 #7
Prøv at ændre den til:

SELECT SUM(hits) AS samlet, navn, url, hits FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100

Bemærk at hits og url er fra den første... Du kan evt vælge at lave et array der mapper et navn til en URL...
Avatar billede snorres Nybegynder
17. december 2004 - 16:19 #8
Kan du give mig et eksempel på en sådan array?
Avatar billede coderdk Praktikant
17. december 2004 - 16:39 #9
$map = array(
  "GooG.dk - Picture Site" => "http://goog.dk/pics/"
  "GooG.dk - Andet navn" => "http://goog.dk/andet/"
  );

Så finder du bare linket med $map[ $row['navn'] ];
Avatar billede snorres Nybegynder
17. december 2004 - 16:41 #10
iøvrigt kan du så ikke lige se på
http://www.goog.dk/portal/sidetop.php

og forklare why den med 686 er over den med 5226 :S

og hvordan kan det vaere at GooG.dk - Picture Site    kun har 686 når jeg ved den har over 6k :S?
det ene besvare jo nok det andet :S
Avatar billede coderdk Praktikant
17. december 2004 - 16:43 #11
Eerh, godt spm - Må jeg lige se den kode der hiver dem ud?
Avatar billede snorres Nybegynder
17. december 2004 - 16:44 #12
<table>

<tr><td valign=top><b>Name:</b></td><td><b>Hits</b></td><td><b>Hits/day</b></td></tr>

<?php

include("../db_ind.inc");

$foresp = mysql_query("SELECT SUM(hits) AS samlet, navn, url, hits FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100");


while($row = mysql_fetch_array($foresp)) {

$tid = "20041216"; // YYYYMMDD
$mytime = strtotime($tid);
$now = time();
$diff = $now-$mytime;
$dage = floor($diff/(60*60*24));
if ($dage < 2) {$dage = 2;}
$day = $row[hits] / $dage;
$day = round($day, 1);


echo"<tr><td><a href=$row[url] target=_blanc>$row[navn] &nbsp;&nbsp;</a></td><td>$row[hits] &nbsp;&nbsp;</td><td>$day</td></tr>";

}

?>

</table>
Avatar billede coderdk Praktikant
17. december 2004 - 16:49 #13
Du bruger hits og ikke samlet ;)

echo"<tr><td><a href=$row[url] target=_blanc>$row[navn] &nbsp;&nbsp;</a></td><td>$row[samlet] &nbsp;&nbsp;</td><td>$day</td></tr>";
Avatar billede snorres Nybegynder
17. december 2004 - 16:50 #14
aaa :)
Avatar billede snorres Nybegynder
17. december 2004 - 16:53 #15
så virker det,
borset fra det med:

$map = array(
  "GooG.dk - Picture Site" => "http://goog.dk/pics/"
  "GooG.dk - Andet navn" => "http://goog.dk/andet/"
  );

Så finder du bare linket med $map[ $row['navn'] ];

hva nu hvis jeg kun vil navngive nogen af dem? Hva med alle dme jeg ikke navn giver?
Avatar billede coderdk Praktikant
17. december 2004 - 16:57 #16
Så kan du f.eks. lave denne:

$url = ( array_key_exists( $row['navn'], $map ) ? $map[ $row['navn'] ] : $row['url'] );

og så skrive $url ud i stedet for $row['url']
Avatar billede snorres Nybegynder
17. december 2004 - 17:00 #17
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /customers/goog.dk/goog.dk/httpd.www/portal/sidetop.php on line 33
Avatar billede coderdk Praktikant
17. december 2004 - 17:01 #18
Og hvordan ser linje 33 ud? :P
Avatar billede snorres Nybegynder
17. december 2004 - 17:03 #19
$url = (array_key_exists($row['navn'], $map) ? $map[ $row['navn'] ] : $row['url'] );

:)

hmm hvor bliver man egentligt så god til php som du er, så du bare kan skrive det fra hoften :D?
Avatar billede coderdk Praktikant
17. december 2004 - 17:08 #20
snorres, Jeg har programmeret i ca. 15 år, efter ret kort tid dog, kan man skrive hele programmer på papir som virker når man taster dem ind på computeren ;) Jeg har i hvert tilfælde skrevet et rimeligt langt program i en forelæsning, på en blok papir - det virkede stort set da jeg skrev det ind :D hehe

Er du sikker? Jeg tror måske du har kopieret mit $map array ind, hvor der mangler et komma ;) Den skal rettes til:

$map = array(
  "GooG.dk - Picture Site" => "http://goog.dk/pics/"
  ,"GooG.dk - Andet navn" => "http://goog.dk/andet/"
  );
Avatar billede snorres Nybegynder
17. december 2004 - 17:12 #21
syntes ikke rigtigt det virker, der står bare det samme :s

Men du havde ret :D
Avatar billede coderdk Praktikant
17. december 2004 - 17:16 #22
Nu har du jo ikke lige en der hedder "GooG.dk - Andet navn" - og "GooG.dk - Picture Site" linker til det samme som før ;) Du skal lige smide nogle flere i $map hvis du vil se resultater tror jeg - har du husket at ændre din echo:

echo"<tr><td><a href=$url target=_blanc>$row[navn] &nbsp;&nbsp;</a></td><td>$row[samlet] &nbsp;&nbsp;</td><td>$day</td></tr>";
Avatar billede coderdk Praktikant
17. december 2004 - 17:16 #23
Du får lige et svar ;)
Avatar billede snorres Nybegynder
17. december 2004 - 17:17 #24
<table>

<tr><td valign=top><b>Name:</b></td><td><b>Hits</b></td><td><b>Hits/day</b></td></tr>

<?php

include("../db_ind.inc");

$foresp = mysql_query("SELECT SUM(hits) AS samlet, navn, url, hits FROM stats GROUP BY navn ORDER BY samlet DESC LIMIT 100");


while($row = mysql_fetch_array($foresp)) {


$map = array(
  "GooG.dk - Picture Site" => "http://goog.dk/pics/"
  ,"GooG.dk - Make your own pics" => "http://www.goog.dk/pic/indexen.php"
  ,"GooG.dk - Andet navn" => "http://www.goog.dk/portal/index.php"
  );


$tid = "20041216"; // YYYYMMDD
$mytime = strtotime($tid);
$now = time();
$diff = $now-$mytime;
$dage = floor($diff/(60*60*24));
if ($dage < 2) {$dage = 2;}
$day = $row[hits] / $dage;
$day = round($day, 1);

$url = (array_key_exists($row['navn'], $map) ? $map[ $row['navn'] ] : $row['url'] );


echo"<tr><td><a href=$url target=_blanc>$row[navn] &nbsp;&nbsp;</a></td><td>$row[samlet] &nbsp;&nbsp;</td><td>$day</td></tr>";

}

?>

</table>

<--den burde da give resultater?

http://www.goog.dk/portal/sidetop.php
Avatar billede snorres Nybegynder
17. december 2004 - 17:18 #25
aaah det er den modsatte vej :S
Avatar billede coderdk Praktikant
17. december 2004 - 17:19 #26
Du kan faktisk godt slette denne fra $map:

,"GooG.dk - Andet navn" => "http://www.goog.dk/portal/index.php"

Det var bare en jeg fandt på - Men det ser da ud til at virke! ;) Hvad er der du ikke synes virker?
Avatar billede snorres Nybegynder
17. december 2004 - 17:20 #27
mig der fattede bjaelle,
det virker fint nu,
kan man gøre så den også bestemmer navnet :D?
holda op jeg er kraevende :D
Avatar billede coderdk Praktikant
17. december 2004 - 17:23 #28
Hmm den forstår jeg ikke helt, kan du ikke gøre det på samme måde? Forklar ;)
Avatar billede snorres Nybegynder
17. december 2004 - 17:24 #29
jo det kan jeg :)
Tusind tak for hjaelpen :D
Super fedt :D
Avatar billede coderdk Praktikant
17. december 2004 - 17:26 #30
np :) go' weekend!
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