Avatar billede unsafe Nybegynder
15. september 2005 - 22:07 Der er 45 kommentarer og
1 løsning

20 nyeste

Jeg har lavet mig et Hot or Not system til mit community,

Jeg har feltet kon i tabellen users der indeholder brugerens køn, Enten Dreng / Pige.

Så har jeg tabellen hot_or_not :

CREATE TABLE `hot_or_not` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `overskrift` varchar(255) NOT NULL default '',
  `beskriv` longtext NOT NULL,
  `bnavn` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
);

Den indeholder oplysningen om billedet man uploader.

Og Tabellen hot_or_notStemme :

CREATE TABLE `hot_or_notStemme` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `billed_id` int(11) NOT NULL default '0',
  `stemme` int(11) NOT NULL default '0',
  `date` longtext NOT NULL,
  PRIMARY KEY  (`id`)
);

Der indeholder stemmerne på billedet.

Nu vil jeg bare gerne have en liste over Top20 Piger Og Top20 Drenge. Altså dem med flest stemmer.

Hvordan gør jeg det? En af de sidste ting jeg mangler før det er færdigt, håber i vil hjælpe mig :)
Avatar billede unsafe Nybegynder
15. september 2005 - 22:09 #1
I titlen 20 Nyeste mener jeg selvfølgelig Top 20 ;-)
Avatar billede jakobdo Ekspert
15. september 2005 - 22:10 #2
SELECT * FROM hot_or_notStemme ORDER BY DESC date LIMIT 20
Avatar billede jaw Nybegynder
15. september 2005 - 22:10 #3
SELECT COUNT(*) as antalStemmer FROM hot_or_notStemme ORDER BY antalStemmer DESC GROUP BY billed_id LIMIT 10
Avatar billede jakobdo Ekspert
15. september 2005 - 22:11 #4
Forkert!
DU kan ikke bruge min løsning!
Du bør kunne bruge: SELECT * FROM hot_or_not ORDER BY id DESC LIMIT 20
Avatar billede jakobdo Ekspert
15. september 2005 - 22:22 #5
Hvad med denne:

SELECT
    count( hot_or_notStemme.id ) AS antal,
    hot_or_not.bnavn,
    hot_or_not.user_id
FROM
    hot_or_notStemme
INNER JOIN
    hot_or_not ON hot_or_notStemme.b_id = hot_or_not.id
GROUP BY
    hot_or_notStemme.b_id
ORDER BY
    antal DESC
LIMIT 20

Så får du både brugernavn og brugerid med ud samtidig?
Avatar billede nielle Nybegynder
15. september 2005 - 22:29 #6
Mit bud på PigeTop20 er dette:

SELECT billed_id, Sum(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20

- eller:

SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20

- alt efter hvordan feltet 'stemme' egentligt er defineret.
Avatar billede unsafe Nybegynder
15. september 2005 - 22:57 #7
Mange tak alle sammen :-)

Hvis jeg bruger denne nielle:

SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20

Hvad skal jeg så skrive for at udskrive det ?

altså eks

$query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20");
$rs = mysql_fetch_array($query)) {

? eller hvad :-)?
Avatar billede jakobdo Ekspert
15. september 2005 - 23:01 #8
Du kan udskrive: $rs['billed_id'] og $rs['StemmerTotal']
Avatar billede unsafe Nybegynder
15. september 2005 - 23:01 #9
$query = mysql_query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20");

mener jeg selvfølgelig :o)
Avatar billede unsafe Nybegynder
15. september 2005 - 23:09 #10
Jeg får fejl på linje 22, hvor linje 22 er:

while($rs = mysql_fetch_array($query)) {

med denne kode:

<?php

$query = mysql_query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20");
while($rs = mysql_fetch_array($query)) {

$conn2 = mysql_query("SELECT * FROM hot_or_not WHERE id = '$rs[billed_id]'");
$rs2 = mysql_fetch_array($conn2);

$conn3 = mysql_query("SELECT * FROM users WHERE id = '$rs2[user_id]'");
$rs3 = mysql_fetch_array($conn3);

?>

<?=$rs3["Brugernavn"];?> - <? echo round($rs["StemmerTotal"], 1); ?><br />

<?php

}

?>
Avatar billede nielle Nybegynder
16. september 2005 - 06:58 #11
Husk at du lige skal forbinde dig til din database-server og udvælge dig en database. Derud over er det altid en god ide at tjekke for sql-fejl med mysql_error():

<?php

$query = mysql_query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_ud=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20") or die(mysql_error());  // Jeg har ændret her.
while($rs = mysql_fetch_array($query)) {

$conn2 = mysql_query("SELECT * FROM hot_or_not WHERE id = '$rs[billed_id]'");
$rs2 = mysql_fetch_array($conn2);

$conn3 = mysql_query("SELECT * FROM users WHERE id = '$rs2[user_id]'");
$rs3 = mysql_fetch_array($conn3);

?>

<?=$rs3["Brugernavn"];?> - <? echo round($rs["StemmerTotal"], 1); ?><br />

<?php

}

?>
Avatar billede unsafe Nybegynder
16. september 2005 - 10:13 #12
hehe ja ok :o)

Jeg får denne fejl:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT hon.id FROM hot_or_not AS hon, users AS u WHERE
Avatar billede nielle Nybegynder
16. september 2005 - 18:02 #13
Prøb at rette:

WHERE hon.user_ud=u.id AND u.kon='Pige')

- til:

WHERE hon.user_id=u.id AND u.kon='Pige')
Avatar billede jakobdo Ekspert
16. september 2005 - 18:07 #14
Hvor er forskellen? :o)
Avatar billede nielle Nybegynder
16. september 2005 - 18:19 #15
Et 'u' i "user_ud" er rettet til et 'i'. Det stemmer nok bedre med et felt du rent faktisk har i din tabel. ;^)
Avatar billede jakobdo Ekspert
16. september 2005 - 18:27 #16
Haha! (og det er ikke min tabel, sad bare lige og kunne ikke se forskellen)
Avatar billede nielle Nybegynder
16. september 2005 - 18:37 #17
Du er ikke den eneste der er blind - regnede automatisk med at det var unsafe som spurgte ;^)
Avatar billede unsafe Nybegynder
16. september 2005 - 20:14 #18
Får denne fejl:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT hon.id FROM hot_or_not AS hon, users AS u WHERE

:o(
Avatar billede nielle Nybegynder
16. september 2005 - 20:22 #19
Hvordan ser din kode ud nu?
Avatar billede jakobdo Ekspert
16. september 2005 - 20:45 #20
Nielle: Er det alle versioner af MYSQL som understøtter subqueries?
Avatar billede jakobdo Ekspert
16. september 2005 - 20:47 #21
Det kræver version 4.1 eller højere!
Du kan evt fyre denne sql af: SELECT version();
Avatar billede unsafe Nybegynder
16. september 2005 - 21:28 #22
<?php
include("includes/mysql.php");
include("includes/functions.php");
include("includes/online.php");

include("includes/top.php");

$query = mysql_query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_id=u.id AND u.kon='Pige')
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20") or die(mysql_error());  // Jeg har ændret her.
while($rs = mysql_fetch_array($query)) {

$conn2 = mysql_query("SELECT * FROM hot_or_not WHERE id = '$rs[billed_id]'");
$rs2 = mysql_fetch_array($conn2);

$conn3 = mysql_query("SELECT * FROM users WHERE id = '$rs2[user_id]'");
$rs3 = mysql_fetch_array($conn3);

?>

<?=$rs3["brugernavn"];?> - <? echo round($rs["StemmerTotal"], 1); ?><br />

<?php

}

include("includes/bund.php");


?>

Har webhotel hos b-one (:
Avatar billede nielle Nybegynder
16. september 2005 - 21:48 #23
Du har en )-parentes for meget i slutningen af denne linje:

WHERE hon.user_id=u.id AND u.kon='Pige')

Prøv i øvrigt jakobdo foreslag med:

SELECT version();

- og post det så her. Umiddelbart kan jeg ikke på B-One egne supportsider se hvilken MySQL version der har.
Avatar billede unsafe Nybegynder
16. september 2005 - 22:17 #24
Forstår ikke hvad du mener Nielle, Jeg har da ikke en ) for meget vel?

Og det med SELECT version(); .. hvor skal det indsættes :?)
Avatar billede jakobdo Ekspert
16. september 2005 - 22:20 #25
Åben PHPMYADMIN, tryk SQL, skriv: SELECT version(); tryk GO
Avatar billede nielle Nybegynder
16. september 2005 - 22:39 #26
Jo da, der er en ) for meget - lige efter 'Pige' som jeg skrev. Her nu er den væk:

<?php
include("includes/mysql.php");
include("includes/functions.php");
include("includes/online.php");

include("includes/top.php");

$query = mysql_query("SELECT billed_id, Count(stemme) AS StemmerTotal
FROM hot_or_notStemme
WHERE billed_id IN
(
    SELECT hon.id
    FROM hot_or_not AS hon, users AS u
    WHERE hon.user_id=u.id AND u.kon='Pige'
)
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20") or die(mysql_error());  // Jeg har ændret her.
while($rs = mysql_fetch_array($query)) {

$conn2 = mysql_query("SELECT * FROM hot_or_not WHERE id = '$rs[billed_id]'");
$rs2 = mysql_fetch_array($conn2);

$conn3 = mysql_query("SELECT * FROM users WHERE id = '$rs2[user_id]'");
$rs3 = mysql_fetch_array($conn3);

?>

<?=$rs3["brugernavn"];?> - <? echo round($rs["StemmerTotal"], 1); ?><br />

<?php
}

include("includes/bund.php");
?>
Avatar billede unsafe Nybegynder
16. september 2005 - 23:52 #27
Stadig samme fejl, hehe:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT hon.id FROM hot_or_not AS hon, users AS u WHERE
Avatar billede jakobdo Ekspert
17. september 2005 - 00:01 #28
Ville denne sql være helt forkert?

SELECT
    hons.billed_id,
    Count(hons.stemme) AS StemmerTotal,
    u.brugernavn
FROM
    hot_or_notStemme as hons
INNER JOIN
    hot_or_not AS hon
ON
    hot_or_notStemme.b_id = hot_or_not.id
INNER JOIN
    users AS u
ON
    hon.user_id=u.id
WHERE
    u.kon='Pige'
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20
Avatar billede unsafe Nybegynder
17. september 2005 - 00:32 #29
Unknown table 'hot_or_notStemme' in on clause

For jeg nu :-O
Avatar billede jakobdo Ekspert
17. september 2005 - 00:34 #30
Ret den til: hons.b_id
Avatar billede unsafe Nybegynder
17. september 2005 - 01:02 #31
Hvilket af det :-D ?
Avatar billede nielle Nybegynder
17. september 2005 - 08:22 #32
Der er kun en af dem som passer sammen med fejlbeskedens tekst:

SELECT
    hons.billed_id,
    Count(hons.stemme) AS StemmerTotal,
    u.brugernavn
FROM
    hot_or_notStemme as hons
INNER JOIN
    hot_or_not AS hon
ON
    hons.b_id = hot_or_not.id
INNER JOIN
    users AS u
ON
    hon.user_id=u.id
WHERE
    u.kon='Pige'
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20
Avatar billede unsafe Nybegynder
17. september 2005 - 09:28 #33
Unknown column 'hons.b_id' in 'on clause'

For jeg.
Avatar billede jakobdo Ekspert
17. september 2005 - 10:00 #34
Hvad hedder dit brugerid i tabellen: USERS?
Avatar billede nielle Nybegynder
17. september 2005 - 10:19 #35
Er det ikke bare fordi at:

hons.b_id = hot_or_not.id

- skal ændres til:

hons.billed_id = hot_or_not.id
Avatar billede unsafe Nybegynder
17. september 2005 - 10:24 #36
Jeg får denne fejl:

Unknown table 'hot_or_not' in on clause
Avatar billede unsafe Nybegynder
17. september 2005 - 10:26 #37
Her er lige min users tabel:

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `brugernavn` varchar(25) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `navn` varchar(255) NOT NULL default '',
  `born_day` int(11) NOT NULL default '0',
  `born_month` int(11) NOT NULL default '0',
  `born_year` int(11) NOT NULL default '0',
  `landsdel` varchar(255) NOT NULL default '',
  `status` varchar(255) NOT NULL default '',
  `besk` varchar(255) NOT NULL default '',
  `created` varchar(255) NOT NULL default '',
  `last_login` varchar(255) NOT NULL default '',
  `www` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `kon` set('Dreng','Pige') NOT NULL default '',
  `efternavn` varchar(255) NOT NULL default '',
  `is_admin` set('yes','no') NOT NULL default '',
  `bruger_status` varchar(255) NOT NULL default '',
  `bcolor` varchar(255) NOT NULL default '',
  `fcolor` varchar(255) NOT NULL default '',
  `tekststoerrelse` char(2) NOT NULL default '',
  `skrift` varchar(255) NOT NULL default '',
  `besked` longtext NOT NULL,
  `notesblok` longtext NOT NULL,
  `vis_mail` set('yes','no') NOT NULL default '',
  `bnavn` varchar(255) NOT NULL default '',
  `ip` varchar(255) NOT NULL default '',
  `host` varchar(255) NOT NULL default '',
  `posts` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ;
Avatar billede jakobdo Ekspert
17. september 2005 - 10:37 #38
SELECT
    hons.billed_id,
    Count(hons.stemme) AS StemmerTotal,
    u.brugernavn
FROM
    hot_or_notStemme as hons
INNER JOIN
    hot_or_not AS hon
ON
    hons.user_id = hon.user_id
INNER JOIN
    users AS u
ON
    hon.user_id=u.id
WHERE
    u.kon='Pige'
GROUP BY billed_id
ORDER BY StemmerTotal DESC
LIMIT 0, 20
Avatar billede unsafe Nybegynder
17. september 2005 - 10:39 #39
Yes :) Endelig !

Mange tak, Nielle & Jakobdo, smid et svar i 2 :-)
Avatar billede unsafe Nybegynder
17. september 2005 - 10:41 #40
Eller, http://unsafe.dk/ny/profiler.ar2.php, der er stemt 10 på det billede. men der står kun en (: kan i være søde at sige mig hvorfor :o)?
Avatar billede nielle Nybegynder
17. september 2005 - 11:02 #41
Hvad mener du præcist med at "der er stemt 10"? Betyder det at der et 1 person som har givet billedet karakteren "10", eller at der er 10 personer som har givet billedet deres stemme?
Avatar billede unsafe Nybegynder
17. september 2005 - 11:09 #42
At der er en person der har givet stemmen 10 :o) hehe
Avatar billede nielle Nybegynder
17. september 2005 - 11:28 #43
Så skal du vist bare rette denne linje:

Count(hons.stemme) AS StemmerTotal

- til dette:

Sum(hons.stemme) AS StemmerTotal

BTW: et int(11)-felt er da vist lidt overkill i forhold til de karaktere du sikkert kan give. Mon ikke du burde rette:

`stemme` int(11) NOT NULL default '0',

- til noget i stil med:

`stemme` int(2) NOT NULL default '0',
Avatar billede unsafe Nybegynder
17. september 2005 - 11:31 #44
Wee, nu virker det :-) Mange tak,

Hehe jo burde jeg vel nok rette ;-)

Smid et svar i 2 :-)
Avatar billede nielle Nybegynder
17. september 2005 - 11:32 #45
Svar :^)
Avatar billede nielle Nybegynder
17. september 2005 - 22:34 #46
Takker for point :^)

jakobdo> Du kan hente din halvdel her:

http://www.eksperten.dk/spm/648893
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