Avatar billede t-johansen Juniormester
13. februar 2007 - 13:04 Der er 11 kommentarer og
1 løsning

Genhente poster til der ikke er flere

Jeg har koden nedenfor som skal integreres i vores intranet side (websitebaker). koden jeg har fungerer fint dog skal den bare genhente poster indtil der ikke er flere.

Jeg har modificeret den lidt og ham som har skrevet koden har ikke tænkt sig godt nok om omkring at hente flere poster, i hans version hentede den bare en gang til også selv om der ikke var flere poster.

Mit problem er bare jeg ikke lige helt ved hvordan jeg skal få den til at genhente indtil der ikke er flere aktive poster.

indholdet tabelen er: 


group_id  med værdi mellem 3-5
active hvor værdi skal være 1
title
shot_content
link

pointen er at den skal hente poster hvor group_id = 3 og hvor active = 1  indtil der ikke er flere derefter skal den hente hvor group_id = 4 og hvor active =1 og til sidst hvor group_id = 5.

men ellers så kører jeg dem bare enkeltvis på group_id




<?php
// Specify read more text
$readmore = "Læs mere";     
// Specify news text

// Query for obtaining stuff from a group
$query = "SELECT * FROM ".TABLE_PREFIX."mod_news_posts WHERE group_id = 3 ORDER BY position DESC LIMIT 0, 10;";

// No changes needed here, maybe for output!
global $database;
$result = $database->query($query);
$total = $result->numRows();      // how many items are there?
if ($total>0) {                  // at least 2 needed for 2 news items
  $data = $result->fetchRow() ;  // get left item
 
  echo '<b>Bemærk:</b>';
  echo '<br>';
  echo '<br><b>'.$data['title'].'</b>';
  echo '<br>'.$data['content_short'];
  echo '<br><a href="'.WB_URL.PAGES_DIRECTORY.$data['link'].PAGE_EXTENSION.'">'.$readmore.'</a><br><br>';
}

else {
echo '<b>Bemærk</b>';
echo '<br>';
  echo '<span>ingen nyheder</span>';
  echo '<br>';
  echo '<br>';
}
?>
Avatar billede jakobdo Ekspert
13. februar 2007 - 14:36 #1
Det jeg i bund og grund ville gøre var:
$query = "SELECT * FROM ".TABLE_PREFIX."mod_news_posts WHERE group_id = 3 ORDER BY position DESC LIMIT 0, 10;";
$result = $database->query($query);
$total = $result->numRows();      // how many items are there?
if($total == 0)
{
//Gør det samme med group id = 4
//Tjek om $total == 0
//Gør det samme med group id = 5
//Tjek om $total == 0
//Er den også 0, så er alt ok...
}

Du kan evt. lave det i en
for($group_id = 3; $group_id <= 5; $group_id++)
{
//Lav sql med group_id = $group_id
if($total > 0)
{
//Udskriv data...
}
}

Det kan også være du kunne lave:
WHERE group_id IN (3,4,5)
Avatar billede t-johansen Juniormester
14. februar 2007 - 15:20 #2
har ikke lige haft tid til at kigge videre på det man skal nok snart
Avatar billede t-johansen Juniormester
15. februar 2007 - 08:18 #3
Så har jeg prøvet, men det virker ikke.

hvis jeg bruger ($total == 0) viser den ikke noget og hvis jeg bruger ($total > 0) viser den kun den nyeste post i mod_news_posts.

jeg vil have den skal hente alle poster i mod_news_posts og vise dem.


<?php

$readmore = "Læs mere";     
$query = "SELECT * FROM ".TABLE_PREFIX."mod_news_posts WHERE group_id = 3 ORDER BY position DESC LIMIT 0, 10;";

global $database;
$result = $database->query($query);
$total = $result->numRows();     
if ($total > 0) {                 
  $data = $result->fetchRow() ; 
 
  echo '<b>Nyheder:</b>';
  echo '<br>';
  echo '<br><b>'.$data['title'].'</b>';
  echo '<br>'.$data['content_short'];
  echo '<br><a href="'.WB_URL.PAGES_DIRECTORY.$data['link'].PAGE_EXTENSION.'">'.$readmore.'</a><br><br>';
}

else {
echo '<b>Nyheder:</b>';
echo '<br>';
  echo '<span>ingen nyheder</span>';
  echo '<br>';
  echo '<br>';
}
?>
Avatar billede jakobdo Ekspert
15. februar 2007 - 08:39 #4
Kan du måske forklare lidt nærmere hvordan du ønsker de skal vises?
Vil du først have alle med gruppe id = 3?
Eller vil du have dem vist på samme tid?
Altså 3, 4 og 5?
Avatar billede t-johansen Juniormester
15. februar 2007 - 09:12 #5
Ja det er ikke let når man ikke ved hvad, nu skal jeg prøve at forklare :-)

Jeg har følgende tabel med felter:

database_tabel: mod_news_posts
group_id
active
title
content_short
link

tabelens indhold skal hentes hvor group_id =3 active=1

['title']
['content_short']
['link']

disse skal hentes ind og vises til der ikke er flere der opfylder kravene.


Bagefter vil jeg hente hvor group_id =4 active=1


og til sidst hvor group_id =5 active=1

Men med de sidste to kan jeg bare indsætte koden igen, det er ikke så vigtigt.

Det er det med at hente alle der opfylder kriteriet der er problemet. I men kode ovenfor henter den det kun engang hvilket gør at det kun er den nyeste post der bliver hentet. Håber det forklarer det bedre.
Avatar billede jakobdo Ekspert
15. februar 2007 - 10:11 #6
Skal du så ikke lave sql som:

$query = "SELECT * FROM ".TABLE_PREFIX."mod_news_posts WHERE group_id = 3 AND active = 1 ORDER BY position DESC;";
Avatar billede t-johansen Juniormester
15. februar 2007 - 10:43 #7
jow men det gør ikke at den viser alle posterne der svarer til den query.

den viser stadig kun en post og der er 3 poster pt der svarer til de kriterer
Avatar billede t-johansen Juniormester
15. februar 2007 - 10:47 #8
Jeg mener der er en kode som gør at den kører følgende igennem indtil der ikke er flere poster:


echo '<br><b>'.$data['title'].'</b>';
  echo '<br>'.$data['content_short'];
  echo '<br><a href="'.WB_URL.PAGES_DIRECTORY.$data['link'].PAGE_EXTENSION.'">'.$readmore.'</a><br><br>';
Avatar billede jakobdo Ekspert
15. februar 2007 - 11:00 #9
Ahhh.
Du skal lave følgende:

global $database;
$result = $database->query($query);
$total = $result->numRows();   
if ($total > 0)
{
    while($data = $result->fetchRow())
    {
      echo '<b>Nyheder:</b>';
      echo '<br>';
      echo '<br><b>'.$data['title'].'</b>';
      echo '<br>'.$data['content_short'];
      echo '<br><a href="'.WB_URL.PAGES_DIRECTORY.$data['link'].PAGE_EXTENSION.'">'.$readmore.'</a><br><br>';
  }
}
Avatar billede t-johansen Juniormester
15. februar 2007 - 11:03 #10
Kanont det var lige det jeg skulle bruge.  Tak for din tålmodighed ....


giv et svar og du får point
Avatar billede jakobdo Ekspert
15. februar 2007 - 11:08 #11
Svar!
Avatar billede jakobdo Ekspert
15. februar 2007 - 11:31 #12
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