Avatar billede webcreator Nybegynder
25. august 2004 - 21:22 Der er 10 kommentarer og
1 løsning

Spring poster over med samme id - MySQL og PHP

Hej Eksperter.

Jeg har et felt ved navn 'contrib' i min tabel, som fungere som reference til en anden tabels ID-nummer. Hvordan kan det ordnes, så kan trække én post ud vha. en While-løkke i PHP, hvis der fx. er 300 poster med tallet '23' i 'contrib' ?
Avatar billede detox Nybegynder
25. august 2004 - 21:41 #1
Kan du ikke lave det med en: GROUP BY i forespørgslen. Ellers er jeg ikke sikker på jeg har forstået spørgsmålet.
Avatar billede webcreator Nybegynder
25. august 2004 - 21:45 #2
Jo, det lyder faktisk meget sandsynligt at den kan bruges. Kan jeg ikke bruge GROUP BY, WHERE, ORDER BY og LIMIT i samme query ?
$query = mysql_query("SELECT `contrib` FROM table GROUP BY `contrib` WHERE `owner` = '".$outputa["id"]."' ORDER BY `id` DESC LIMIT $list_offset, $list_per_page") or die(mysql_error());
Avatar billede detox Nybegynder
25. august 2004 - 21:49 #3
Jo jeg tror bare du skal have GROUP BY efter WHERE:

SELECT `contrib` FROM table WHERE `owner` = '".$outputa["id"]."' GROUP BY `contrib`  ORDER BY `id` DESC LIMIT $list_offset, $list_per_page

Jeg forstod det sådan at det var data fra den anden tabel du vil hente. Vil du så gøre det i en løkke?
Avatar billede bojohansen Nybegynder
25. august 2004 - 21:52 #4
Er ikke lige helt sikker her, men hvad med
SELECT DISTINCT bla. bla
Avatar billede detox Nybegynder
25. august 2004 - 21:58 #5
Jeg forestillede mig du kunne lave det i et hug på den her måde:

SELECT b.* FROM tabel_1 a LEFT JOIN tabel_2 b ON a.contrib = b.id WHERE a.owner='$outputa[id]' GROUP BY a.contrib ORDER BY a.id DESC LIMIT $list_offset, $list_per_page
Avatar billede webcreator Nybegynder
25. august 2004 - 22:33 #6
Det virker ganske fint, når jeg bare skal udskrive noget. Skal jeg derimod tælle (COUNT), så får jeg et helt forkert resultat. Hvad er galt her ? :

$query35 = mysql_query("SELECT COUNT(`id`) AS contribs FROM table WHERE `owner` = '".$output1["id"]."' GROUP BY `contrib`") or die(mysql_error());
$output35 = mysql_fetch_array($query35);

$posts = $output35["contribs"];      // echo $posts giver tallet 2 - burde blive 9
Avatar billede detox Nybegynder
25. august 2004 - 22:38 #7
Så skal du bruge DISTINCT:

$query35 = mysql_query("SELECT COUNT(DISTINCT `id`) AS contribs FROM table WHERE `owner` = '".$output1["id"]."'") or die(mysql_error());
Avatar billede webcreator Nybegynder
25. august 2004 - 22:44 #8
Hm, din funktion virker ikke. Den tæller alle sammen, uden at tage hensyn til poster med flere ens contrib-numre
Avatar billede detox Nybegynder
25. august 2004 - 22:48 #9
Arh, skal selvfølgelig være:

COUNT(DISTINCT `contrib`)
Avatar billede webcreator Nybegynder
25. august 2004 - 23:01 #10
Perfekt! Tak skal du have :)
Vil du smide et svar? Og kan du kort fortælle, hvad forskellen er mellem DISTINCT og GROUP BY ?
Avatar billede detox Nybegynder
25. august 2004 - 23:22 #11
I det her tilfælde:

SELECT COUNT(contrib) FROM tabel GROUP BY contrib

bliver resultatet antallet af hvert forskelligt contrib

SELECT COUNT(DISTINCT contrib) FROM tabel

giver antallet af forskellige contrib
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