Avatar billede larma Nybegynder
25. april 2006 - 23:02 Der er 13 kommentarer og
1 løsning

Hente ut to forekomster fra en MySQL tabell.

Jeg har en MySQL tabell som innholder nyheder, hvor jeg skal hente ud de to nyeste nyhedene, som videre skal skrives ut i en nyheds kolonne. Mitt problem er å finne en nem måde å gjøre dette på. Forekomstene skal hentes ud ved hjelp av en funktion som ligger på en ekstern fil. Tabellen med nyhedene har to rader, en primærnøgel(autonummer) og en med nyhedene. Kom med forslag om den burde inneholdt noe mer.

function hent($nyhed1, nyhed2)
{
include "../secure/inc_db.php";
$query = "SELECT nyhed FROM nyheder";
$resultat = mysql_query($query) or die ("Feil " .mysql_error());

OSV...
OSV...
}

Så skal de samme nyhedene skrives ud på flere sider ved kall på funksjonen.
<p>
hent($nyhed1);
</p>
<p>
nyheter($nyhed2);
</p>

Håper I forstod mitt problem/spørsmål.
Avatar billede codebase Praktikant
25. april 2006 - 23:42 #1
function getNews($offset = 0, $limit = -1 )
{
    if ( $limit > -1 )
    $limitQuery = "LIMIT $offset, $limit";
    include_once "../secure/inc_db.php";
    $query = "SELECT * FROM nyheder ORDER BY id DESC  $limitQuery";
    $result = mysql_query($query) or die ("Feil " .mysql_error());
    $i = 0;
    while ($row = mysql_fetch_object($result)) {
      $return_array[$i]['id'] = $row->id;
      $return_array[$i]['nyhed'] = $row->nyhed;
      $i++;   
    }
    return $return_array;
}

// get the 5 latest news
$myNews = getNews( 0, 5 );
foreach( $myNews as $key => $news )
{
echo "<p>" . $news['nyhed'] . "</p>";
}
Avatar billede larma Nybegynder
26. april 2006 - 19:07 #2
Takk codebase, din kode virket riktig godt. Men må du forklare meg litt hva de forskjellige "linjene" gjør? Blant annet, hvorfor bruger du mysql_fetch_object() og ikke mysql_fetch_array()?

Mvh
Lars Marius.
Avatar billede codebase Praktikant
26. april 2006 - 22:52 #3
jeg er tilhænger af objekt orienteret programmering, nok derfor jeg valgte denne i stedet for fletch_array.

getNews funktionen har jeg tilføjet Offeset og Limit, så kan du selv vælge hvor mange news du vil have retuneret og hvorfra på listen de skal hentes. getNews() vil retunere alle.

Ellers tror jeg line for line næsten i sig selv siger hvad der sker &#61514;

foreach( $myNews as $key => $news )
{
echo "<p>" . $news['nyhed'] . "</p>";
}

kunne også være:

foreach( $myNews as $key => $news )
{
echo "<p>" . $myNews[$key]['nyhed'] . "</p>";
}

men det er jo en smags sag hvordan man gør det.

Kig på http://php.net for at se hvad de enkelte funktioner udføre, eks

Foreach --> http://dk2.php.net/manual/se/control-structures.foreach.php
Avatar billede larma Nybegynder
26. april 2006 - 23:07 #4
foreach'en kan jo også lige skrives:

$myNews = getNews( 0, 5 );
foreach( $myNews as $news )//uten $key => $news
{
    echo "<p>" .echo $news['nyhet'] . "</p>";
}
Eller er det noe forkert med denne måden?(den skriver iallfall ud det samme)

Det jeg hovedsaklig lurte på var hvorfor du setter $limit = -1 og ikke $limit = 0 som parameter? Og hva gjør så videre $limitQuery = "LIMIT $offset, $limit";? Og til slutt hva funktion har  $limitQuery i slutten av SQL-spørringen?

Mvh
Lars Marius.
Avatar billede codebase Praktikant
26. april 2006 - 23:15 #5
foreach uden key, virker ganske fint, nogle gange gemmer man bare værdien i key, og skal derfor bruge denne metode til at retunere værdien.

limit i sql, retuner bare det antal rækker du ønsker i stedet for dem alle.

SELECT * from TABLE (retuner eks alle 100 rækker)

function getNews($offset = 0, $limit = false )
{
    if ( $limit != false )
    $limitQuery = "LIMIT $offset, $limit";
Avatar billede codebase Praktikant
26. april 2006 - 23:16 #6
SELECT * from TABLE LIMIT 0,10(retuner eks alle 10 rækker, start fra den første )
SELECT * from TABLE LIMIT 4,10(retuner eks alle 10 rækker, start fra den 3)
Avatar billede codebase Praktikant
26. april 2006 - 23:19 #7
SELECT * from TABLE LIMIT 4,10(retuner eks 10 rækker, start fra den 5) sorry ;)
Avatar billede larma Nybegynder
26. april 2006 - 23:32 #8
Men egentlig trenger man ikke å sette $offset = 0, $limit = -1 i funksjonen, lige function getNews($offset, $limit ), når parameterene får sine verdier fra funksjonskallet(her verdiene 0 og 5):

$myNews = getNews( 0, 5 );
foreach( $myNews as $key => $news )
{
echo "<p>" . $news['nyhed'] . "</p>";
}
Er det riktig, eller må/bør man sette $offset = 0 og $limit = -1?

Og til slutt hva er hensikten med denne if-setningen:

if ( $limit > -1 )
$limitQuery = "LIMIT $offset, $limit";

Gir du et svar neste gang, så skal jeg ikke plage deg mer ;) Så skal du også få dine vell fortjente points. Tusen takk for hjelpen.
Avatar billede codebase Praktikant
26. april 2006 - 23:38 #9
function getNews($offset = 0, $limit = false )
{
    if ( $limit != false )
    $limitQuery = "LIMIT $offset, $limit";

$myNews = getNews(); // retunere alle rækker i databasen



function getNews($offset, $limit )
{


$myNews = getNews(); // gir en php fejl


derfor den if sætning

if ( $limit > -1 )
$limitQuery = "LIMIT $offset, $limit";


;)
Avatar billede codebase Praktikant
26. april 2006 - 23:39 #10
jeg samler ikke på points, så dem beholder du bare :)
Avatar billede larma Nybegynder
26. april 2006 - 23:43 #11
Da har jeg ingen anne måte å takke deg på en å si tusen takk igjen, når du ikke tar imot points som takk mener jeg :)
Avatar billede codebase Praktikant
26. april 2006 - 23:45 #12
;)
Avatar billede larma Nybegynder
26. april 2006 - 23:48 #13
hep.
Avatar billede codebase Praktikant
27. april 2006 - 16:06 #14
se eks. på anvendelse af KEY i foreach lykken ;)
http://www.eksperten.dk/spm/705718
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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