Avatar billede haolan Nybegynder
19. marts 2006 - 17:33 Der er 25 kommentarer og
1 løsning

Udskriv kun dem der ikke gentager sig

Ja jeg lavede lige en lille formuleringsfejl i det tidligere spørgsmål :)

http://www.eksperten.dk/spm/696361

meningen er at den skal udskrive de brugere der ikke har tilmeldt sig til et givent arrangement, som står skrevet i table2. Når en bruger tilmelder sig et arrengement indsættes der en række i table2 hvor brugerens id står skrevet samt lidt andre oplysninger..

Problemet med den løsning vi har her nu er at den tager kun højde for hvis en bruger aldrig har tilmeldt sig noget fordi den tjekker jo om værdien er null. Og brugerne kan jo have tilmeldt sig et tidligere arrangement og derfor bliver de ikke skrevet på, selvom de ikke har tilmeldt sig det arrangement der skulle vises statistik på.

Nogen der kan hjælpe mig med dette?
Avatar billede jakobdo Ekspert
19. marts 2006 - 17:46 #1
Hvordan har du bygget dine tabeller op?
Jeg ville jo selv bygge dem op på følgende måde:

bruger_tabel
id, navn osv...

arrrangement_tabel
id, navn osv...

tilmelding_tabel
bruger_id, arrangement_id, evt tidspunkt og lign.

Men hvordan har du lavet din løsning?
Avatar billede haolan Nybegynder
19. marts 2006 - 17:48 #2
users:
id, navn osv..

arrangement_tabel:
id, overskrift,

tilmelding_tabel:
id, bruger_id, arrangement_id, starttid, sluttid osv...
Avatar billede haolan Nybegynder
19. marts 2006 - 17:54 #3
så alt i alt.. rimelig meget som du skrev :)
Avatar billede jakobdo Ekspert
19. marts 2006 - 17:57 #4
Hvorfor har du starttid, sluttid i tilmelding_tabel?
Og du burde evt kunne lave bruger_id og arrangement_id som primærnøgle, og dermed slette Id. (men det er mindre detalje)
Avatar billede haolan Nybegynder
19. marts 2006 - 18:23 #5
hov forkert angående starttid og sluttid.. de står selvfølgelig i arrangement tabellen :)
Avatar billede haolan Nybegynder
19. marts 2006 - 18:26 #6
men som jeg skrev i den anden tråd..

Jeg har forsøgt at lave det med den der WHERE clause, men den vil stadig kun udskrive de brugere der ikke har meldt sig til før..
Avatar billede jakobdo Ekspert
19. marts 2006 - 18:32 #7
Ok, prøv lige at forklar lidt nærmere, du har et arrangement, f.eks. arrangement_id = 21 og så vil du vide hvilke brugere som ikke har tilmeldt sig arrangement 21, right?
Avatar billede haolan Nybegynder
19. marts 2006 - 18:35 #8
jeg poster lige mit script, så er det nok lidt nemmere at følge med :)

<?

$hent_raid = mysql_query("SELECT overskrift,id FROM raid WHERE id = '".$_GET['id']."' AND ejer = '$klanid'");
$raid = mysql_fetch_array($hent_raid);

echo "<table class='raid'>";
echo "<tr><td bgcolor='#0099CC'>".$raid['overskrift']."</td></tr>";
echo "<tr><td>Følgene mangler at melde sig til det kommende raid:</td></tr>";

$hent_stamme = mysql_query("SELECT users.stamme, users.heroesid from users
LEFT JOIN raidtilmeldt on users.id = raidtilmeldt.stamme
WHERE klanid = '$klanid' AND raidtilmeldt.stamme is Null
UNION
SELECT raidtilmeldt.stamme, raidtilmeldt.ref from raidtilmeldt
LEFT JOIN users on raidtilmeldt.stamme = users.id
WHERE raidtilmeldt.ref = '".$raid['id']."' AND users.id is null") or die(mysql_error());

$count = mysql_num_rows($hent_stamme);

while($stamme = mysql_fetch_array($hent_stamme)) {
    echo "<tr><td bgcolor='#FFCC33'>(#".$stamme['heroesid'].") ".$stamme['stamme']."</td></tr>";
}
echo "<tr><td>$count mangler at tilmelde sig</td></tr>";
echo "</table>";
?>
Avatar billede haolan Nybegynder
19. marts 2006 - 18:36 #9
Og ja.. præcis som du skrev.. :)
Avatar billede jakobdo Ekspert
19. marts 2006 - 19:19 #10
Jeg kom lige til at tænke på, du muligvis kunne lave det med:

SELECT u.navn FROM tilmelding_tabel AS t LEFT JOIN users AS u ON u.id = t.bruger_id WHERE t.arrangement_id = 21 AND u.navn IS NULL;
Avatar billede haolan Nybegynder
19. marts 2006 - 19:24 #11
hehe den sætning må du forklare lidt nærmere.. :D det begynder at blive rimelig avanceret.. :)

skal jeg bare bytte den ud med den gamle query?

:-Haolan
Avatar billede jakobdo Ekspert
19. marts 2006 - 19:26 #12
Prøv lige at test den i phpmyadmin.
Du retter selvfølgelig 21 til det arrangement du vil teste.

SELECT u.navn FROM tilmelding_tabel AS t LEFT JOIN users AS u ON u.id = t.bruger_id WHERE t.arrangement_id = 21 AND u.navn IS NULL;
Avatar billede haolan Nybegynder
19. marts 2006 - 19:31 #13
hmm ja fejl melder den da ikke..

men der kommer ingen resultater
MySQL returned an empty result set (i.e. zero rows)
Avatar billede jakobdo Ekspert
19. marts 2006 - 19:32 #14
Prøv at start med:
SELECT u.navn FROM tilmelding_tabel AS t LEFT JOIN users AS u ON u.id = t.bruger_id WHERE t.arrangement_id = 21
Avatar billede haolan Nybegynder
19. marts 2006 - 19:35 #15
SELECT u.stamme FROM raidtilmeldt AS t LEFT JOIN users AS u ON u.id = t.stamme WHERE t.ref = ".$raid['id']." AND u.klanid = '$klanid'

har rettet den lidt til, så det lige passer ind :)

Og når jeg fjerner det der AND u.navn IS NULL;  udskriver den dem der har meldt sig til og ikke dem der mangler :)
Avatar billede jakobdo Ekspert
19. marts 2006 - 19:40 #16
Lad os prøve at bytte rundt! :o)

SELECT u.stamme FROM users AS u LEFT JOIN raidtilmeldt AS r ON u.id = t.stamme WHERE t.ref = ".$raid['id']." AND u.klanid = " . $klanid
Avatar billede haolan Nybegynder
19. marts 2006 - 19:43 #17
MySQL said: Documentation
#1109 - Unknown table 't' in where clause
Avatar billede jakobdo Ekspert
19. marts 2006 - 19:45 #18
Ret: t.ref til: r.ref
Avatar billede haolan Nybegynder
19. marts 2006 - 19:45 #19
ahh der var lige røget et r ind i stedet for t :)

men den udskriver blot det samme.. kun de brugere som allerede har meldt til :)
Avatar billede haolan Nybegynder
19. marts 2006 - 19:50 #20
hvis jeg skriver r.ref istedet skriver den unknown table 't' in ON clause
Avatar billede haolan Nybegynder
19. marts 2006 - 19:51 #21
så går ud fra du mener AS t ON  at der skal stå :)
Avatar billede jakobdo Ekspert
19. marts 2006 - 20:40 #22
Prøv lige at fang mig på msn: jakobdo {at} hotmail [dot] com
Avatar billede haolan Nybegynder
19. marts 2006 - 21:59 #23
spørgsmålet er rykket over i http://www.eksperten.dk/spm/696474  da jakobdo fandt det som et mere passende sted at placere det :)
Avatar billede jakobdo Ekspert
20. marts 2006 - 08:00 #24
:o)
Avatar billede jakobdo Ekspert
20. marts 2006 - 08:00 #25
Luk og behold dine point.
Avatar billede haolan Nybegynder
20. marts 2006 - 10:38 #26
lukket..
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