Avatar billede razmuz Nybegynder
01. september 2005 - 11:32 Der er 15 kommentarer og
1 løsning

Vis relevante nyheder

Hej
Jeg har et problem med en hjemmeside jeg er igang med.
Jeg har en bruger, som har nogle tilknytninger til én eller flere grupper. Hver gruppe har nogle nyheder. Når bruger X går ind på siden skal han se en liste over alle nyheder som er er tilknyttet de grupper han er tilknyttet.
Grupperne har numre (fx 2 og 4)
Første problem:
Hvordan får jeg en array/liste ud med hans gruppetilknytninger.
Fx. $bruger_tilknytning = [array]

dernæst ... hvordan laver jeg et udtræk fra databasen med alle nyheder fra grupperne i $bruger_tilknytning????

Kan I hjælpe?
Avatar billede jakobdo Ekspert
01. september 2005 - 12:22 #1
Hvis vi siger brugerens nyhedsgrupper er 2 og 4.
Kunne du lave en sql ala:
SELECT * FROM nyheder WHERE gruppe IN (2,4) ORDER BY dato
Avatar billede jaw Nybegynder
01. september 2005 - 15:06 #2
Det kan du f.eks. gøre således:

$cmd = "SELECT * FROM tabel WHERE gruppe IN(";
$q = mysql_query("SELECT gruppe FROM brugere WHERE brugerid = 1") or die(mysql_error());
while($row = mysql_fetch_array($q)) {
  $cmd .= $row['gruppe'].",";
}
$cmd = substr($cmd, 0, strlen($cmd)-1);
$cmd .= ") ORDER BY id";

$query = mysql_query($cmd);
while($row = mysql_fetch_array($query)) {
  //hvad du nu end vil med det !
}
Avatar billede razmuz Nybegynder
01. september 2005 - 16:24 #3
Jeg kan helt klart bedst li' jakobdo's løsning, men kan man i stedet for (2,4) indsætte en array?!?!?
fx. "... gruppe IN $array ORDER ..."
Avatar billede jaw Nybegynder
01. september 2005 - 16:30 #4
Der er ikke langt mellem mit og jakob's forslag. Du kan lige prøve følgende:

$gruppe = array(2, 4);
$cmd = "SELECT * FROM tabel WHERE gruppe IN(";
foreach($gruppe as $int) {
  $cmd .= $int.",";
}
$cmd = substr($cmd, 0, strlen($cmd)-1);
$cmd .= ") ORDER BY dato";
echo $cmd;
Avatar billede razmuz Nybegynder
01. september 2005 - 16:37 #5
Tak ... kigger på det i aften. Har ikke lige tid nu. Tak for nu!
Avatar billede jakobdo Ekspert
01. september 2005 - 17:14 #6
I stedet for: (2,4)
Kan du lave: (implode(",", $array))
Avatar billede razmuz Nybegynder
03. september 2005 - 12:07 #7
Mit udtræk fra databasen hvor jeg får gruppetilknytningerne fra (fx 2 og 4) ... hvordan får jeg dem lagt i en array?

Det her virker ikke, tror jeg?

$query_tilknyt = "SELECT rel_grupper_bruger.gruppeid"
                ." FROM rel_grupper_bruger"
                ." WHERE rel_grupper_bruger.brugerid = $brugerid ORDER BY rel_grupper_bruger.gruppeid ASC LIMIT 0, 30";

$result_tilknyt = mysql_query ($query_tilknyt) or die ("Invalid query - tilknyt");

// her skal der laves en array med de gruppe-id'er som brugeren er medlem af!?
while ($row = mysql_fetch_array($result_tilknyt)) {
$grupper = $row['gruppeid'];
}
Avatar billede jakobdo Ekspert
03. september 2005 - 12:14 #8
Sådan:

$grupper = array();

$query_tilknyt = "SELECT rel_grupper_bruger.gruppeid"
                ." FROM rel_grupper_bruger"
                ." WHERE rel_grupper_bruger.brugerid = $brugerid ORDER BY rel_grupper_bruger.gruppeid ASC LIMIT 0, 30";

$result_tilknyt = mysql_query ($query_tilknyt) or die ("Invalid query - tilknyt");

// her skal der laves en array med de gruppe-id'er som brugeren er medlem af!?
while ($row = mysql_fetch_array($result_tilknyt))
{
    $grupper[] = $row['gruppeid'];
}
Avatar billede razmuz Nybegynder
03. september 2005 - 12:30 #9
Det virker... tak... men det første med "... IN (implode(",", $online_grupper))..." virker ikke.... kan du se om der er noget galt?

$query = 'SELECT objekter.id, objekter.titel, objekter.arr_start_dato'
      .' FROM objekter, rel_objekter_grupper'
      .' WHERE objekter.type = "arrangement" AND rel_objekter_grupper.objektid = objekter.id AND rel_objekter_grupper.gruppeid IN (implode(",", $online_grupper)) ORDER BY objekter.arr_start_dato ASC LIMIT 0, 30';
Avatar billede razmuz Nybegynder
03. september 2005 - 12:31 #10
Jeg har lige prøvet at lave imlode seperat og echo resultatet... Der virker det fint!
Avatar billede jakobdo Ekspert
03. september 2005 - 12:40 #11
Test lige denne sql:

$query = "
SELECT
    objekter.id,
    objekter.titel,
    objekter.arr_start_dato
FROM
    objekter,
INNER JOIN
    rel_objekter_grupper
ON
    rel_objekter_grupper.objektid = objekter.id
WHERE
    objekter.type LIKE 'arrangement'
AND
    rel_objekter_grupper.gruppeid IN (" . implode(",", $online_grupper).")
ORDER BY
    objekter.arr_start_dato ASC
LIMIT 0, 30";
Avatar billede razmuz Nybegynder
03. september 2005 - 12:44 #12
Den siger også Invalid query.... altså det virker fint hvis jeg skriver "2,4" istedet for det der implode array!!!
Avatar billede jakobdo Ekspert
03. september 2005 - 12:52 #13
Prøv i din gamle query at ret til:
(2,4) til: (' . implode(",",$grupper) . ')
Avatar billede razmuz Nybegynder
04. september 2005 - 10:02 #14
Det virker :)
Super fedt - smid et svar!
Avatar billede jakobdo Ekspert
04. september 2005 - 11:32 #15
Svar!
Avatar billede jakobdo Ekspert
04. september 2005 - 15:52 #16
Takker for point!
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

IT-JOB

Capgemini Danmark A/S

Market Segment Lead, CPRD

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Applikationsarkitekt til stor applikationstransformation i Forsvaret

Politiets Efterretningstjeneste

Data engineer til PET

Politiets Efterretningstjeneste

Teamleder til Center for CNE-operationer