[php] laatst toegevoegde records onderscheiden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Oke, wat is de bedoeling:
Ik heb een filmlijst, deze wordt opgehaald uit de database en getoont met het volgende stukje code:
PHP:
1
2
3
4
5
6
7
8
9
<? 
    echo "<table>"; 
    $getFilms = mysql_query(" SELECT * FROM films ORDER BY titel ASC "); 
    while ($films = mysql_fetch_array($getFilms)){ 
         
        echo "<tr><td> $films[titel] </td><td> $films[nr] </td></tr>"; 
    } 
    echo "</table>"; 
?> 


heel erg simpel allemaal...

Nu wil ik de complete lijst gesorteerd op alfabet, maar dat laatste 10 toegevoegde films bold getoond worden.

ik hoef geen kant en klaar script, maar een normale uitleg zou ik zeer op prijs stellen.

laters

Acties:
  • 0 Henk 'm!

Verwijderd

limit aan je query toevoegen?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Het meest makkelijke is om eerst de laatste 10 films op te halen, deze filmID's in een array te zetten.

Vervolgens gebruik je je eigen code, maar voeg je een controle toe om te kijken of het filmID, behorende bij die rij in de eerdere array staat.

Je gebruikt dan dus 2 query's :)

[ Voor 8% gewijzigd door gorgi_19 op 16-10-2004 19:55 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • kokorico
  • Registratie: Januari 2004
  • Laatst online: 13:14
Euhm, waarom order je dan niet op tijd?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

kokorico schreef op 16 oktober 2004 @ 19:55:
Euhm, waarom order je dan niet op tijd?
Nu wil ik de complete lijst gesorteerd op alfabet, maar dat laatste 10 toegevoegde films bold getoond worden.
Omdat de sortering wel alfabetisch moet zijn, als ik de TS goed heb begrepen :)

[ Voor 5% gewijzigd door gorgi_19 op 16-10-2004 19:56 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 11:30

Guldan

Thee-Nerd

je zou per film een datum kunnen opslaan in Timestamp. Daar a.d.h van die Timestamp met een query sorteren op Timestamp met een limit.

SELECT * FROM films ORDER BY datum LIMIT(0,10). (geloof ik, is dus ongetest en dient meer als voorbeeld) Dan selecteer de je 10 laatst toegevoegde films. Dan hoef je ze alleen nog maar aan te roepen en bold maken.

edit:

ben het wel eens met Gorgie_1 eens eigenlijk. Zo zou ik het ook aanpakken. maar als het niet op alfabet gesorteerd hoeft te worden dan werkt bovenstaande code ook.

edit:
typefout

[ Voor 24% gewijzigd door Guldan op 16-10-2004 19:59 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
gorgi_19 schreef op 16 oktober 2004 @ 19:55:
Het meest makkelijke is om eerst de laatste 10 films op te halen, deze filmID's in een array te zetten.

Vervolgens gebruik je je eigen code, maar voeg je een controle toe om te kijken of het filmID, behorende bij die rij in de eerdere array staat.

Je gebruikt dan dus 2 query's :)
oke...maar hoe zorg ik er dan voor dat hij de 10 gevonden films uit de eerste query vergelijkt met de tweede query die de complete lijst resultaten met resultaten bevat?

[ Voor 6% gewijzigd door WebTwister op 16-10-2004 20:00 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

http://php.net/array_intersect

edit:
verkeerd gelezen :X

[ Voor 48% gewijzigd door Wolfboy op 16-10-2004 20:01 ]

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

WebTwister schreef op 16 oktober 2004 @ 19:59:
oke...maar hoe zorg ik er dan voor dat hij de 10 gevonden films uit de eerste query vergelijkt met de tweede complete resultaten?
Die zet je in een array :) Je hebt dan dus een array met 10 filmID's

In regel 6 van jouw code ga je eerst controleren het filmID in de array staat. Indien ja, dan maak je hem vet. Anders maak je hem niet vet (en hou je hem zoals het is)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Die zet je in een array :) Je hebt dan dus een array met 10 filmID's

In regel 6 van jouw code ga je eerst controleren het filmID in de array staat. Indien ja, dan maak je hem vet. Anders maak je hem niet vet (en hou je hem zoals het is)
oke...ik ga even aan de slag...bedankt voor de snelle hulp!

Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 11:30

Guldan

Thee-Nerd

1e query: Haal de laatste films op maar order op datum en met limit(0,10). Dan sla de gevonden films id's op.

2e query: haal alle films op en kijk of de id's matchen met de resultaten uit de eerste query en zoja maak deze bold.
Ik hoop dat het nu wat duidelijker is.

edit:
Jullie zijn ook veel te snel :P

[ Voor 22% gewijzigd door Guldan op 16-10-2004 20:05 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Oke ik maak nu die vergelijking, maar nu doet hij alleen de laatst toegevoegde bold maken..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table>
        <?
            $getLaatste = mysql_query(" SELECT * FROM dvd ORDER BY id DESC LIMIT 0, 10 ") or die (mysql_error());
            $laatste = mysql_fetch_array($getLaatste);
            
            $getFilms = mysql_query(" SELECT * FROM dvd ORDER BY titel ASC ") or die (mysql_error());
            while ($films = mysql_fetch_array($getFilms)){?>
            
            <tr>
                <td>
                    <? if ($laatste['id'] == $films['id']){echo "<b>";}?>
                    <? if (!empty($films['imdb'])){echo"<a href=\"$films[imdb]\">$films[titel]</a>";} else {echo"$films[titel]";}?>
                    <? if ($laatste['id'] == $films['id']){echo "</b>";}?>
                </td>
            </tr>
            
        <?  } ?>
</table>


hier is het voorbeeld:
http://www.johanberkhout.net/test.php

wat doe ik fout?

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

$laatste = mysql_fetch_array($getLaatste); <-- hoeveel resultaten wil je?
Want op die manier krijg je er maar 1, dat moet dus ook met een loop

Btw oplossing misschien:
PHP:
1
2
3
4
5
6
7
8
9
10
while($laatste[] = mysql_fetch_array($getLaatste));
array_pop($laatste);

while ($films = mysql_fetch_array($getFilms)){
     if(in_array($films['titel'], $laatste){
         # <b> tags
     }else{
         # zonder <b>
     }
}

[ Voor 56% gewijzigd door Wolfboy op 16-10-2004 20:36 ]

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Wolfboy schreef op 16 oktober 2004 @ 20:32:
$laatste = mysql_fetch_array($getLaatste); <-- hoeveel resultaten wil je?
Want op die manier krijg je er maar 1, dat moet dus ook met een loop
ik wil dus 10 resultaten...

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
ik heb het dank jullie wel!!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table>
        <?
            $getLaatste = mysql_query(" SELECT * FROM dvd ORDER BY id DESC LIMIT 0, 10 ") or die (mysql_error());
            while ($laatste = mysql_fetch_array($getLaatste)){
            
            $getFilms = mysql_query(" SELECT * FROM dvd ORDER BY titel ASC ") or die (mysql_error());
            while ($films = mysql_fetch_array($getFilms)){?>
            
            <tr>
                <td>
                    <? if ($laatste['id'] == $films['id']){echo "<b>";}?>
                    <? if (!empty($films['imdb'])){echo"<a href=\"$films[imdb]\">$films[titel]</a>";} else {echo"$films[titel]";}?>
                    <? if ($laatste['id'] == $films['id']){echo "</b>";}?>
                </td>
            </tr>
            
        <?  } }?>
</table>

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Dit is wel vies hoor, nu haal je 10x alle gegevens uit de database... Het lijkt alsof je nu 10x alle gegevens uit de database trekt en er telkens 1 (andere) rij bold wordt weergegeven. Of zie ik dat verkeerd? Doe nou eens wat gorgi_19 zegt (pseudo):

code:
1
2
3
4
fetch laatste 10 films query --> array
fetch films query
if in array echo bold
else echo normal

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
X-Lars schreef op 17 oktober 2004 @ 15:17:
Dit is wel vies hoor, nu haal je 10x alle gegevens uit de database... Het lijkt alsof je nu 10x alle gegevens uit de database trekt en er telkens 1 (andere) rij bold wordt weergegeven. Of zie ik dat verkeerd? Doe nou eens wat gorgi_19 zegt (pseudo):

code:
1
2
3
4
fetch laatste 10 films query --> array
fetch films query
if in array echo bold
else echo normal
ik ga het proberen, alleen weet ik niet precies hoe ik dit correct syntactisch op moet bouwen..

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
ik heb met de hulp van een vriend dit in elkaar geklust ... is dit wat jullie bedoelde?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table>
<?
    $lastTenMovies = array();
    $getLaatste = mysql_query(" SELECT id FROM dvd ORDER BY id DESC LIMIT 0, 10 ") or die (mysql_error());  
    while ($laatste = mysql_fetch_array($getLaatste)){ $lastTenMovies[] =  $laatste[0]; }                   
    
    $getFilms = mysql_query(" SELECT * FROM dvd ORDER BY titel ASC ") or die (mysql_error());               
    while ($films = mysql_fetch_array($getFilms)){                                                          
        if (in_array($films[0], $lastTenMovies)) {                                                          
            echo("<tr><td><b><a href=\"$films[imdb]\">$films[titel]</a></b></td></tr>");                    
            }
        else {
            echo("<tr><td><a href=\"$films[imdb]\">$films[titel]</a></td></tr>");               
            }
        }
?>
</table>


thanks to wouter ;)

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Da's beter :)

Alleen zie ik zo snel even dat je mysql_fetch_array() gebruikt, maar vervolgens $films[0]... ;)

Acties:
  • 0 Henk 'm!

  • twopack
  • Registratie: Februari 2001
  • Laatst online: 02-09 09:09
X-Lars schreef op 20 oktober 2004 @ 15:11:
Da's beter :)

Alleen zie ik zo snel even dat je mysql_fetch_array() gebruikt, maar vervolgens $films[0]... ;)
Ja, waarom niet? Ik snap geloof ik niet wat je bedoelt.

specs


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

|:(

Ik verwarde mysql_fetch_assoc met mysql_fetch_array. Ben gewend _assoc te gebruiken nl., en dan zou het bijv. $film['id'] moeten zijn i.p.v. $film[0]. Met _array kan het beide.

Acties:
  • 0 Henk 'm!

  • twopack
  • Registratie: Februari 2001
  • Laatst online: 02-09 09:09
hehe np ;)

specs


Acties:
  • 0 Henk 'm!

Verwijderd

WebTwister schreef op 16 oktober 2004 @ 19:59:
oke...maar hoe zorg ik er dan voor dat hij de 10 gevonden films uit de eerste query vergelijkt met de tweede query die de complete lijst resultaten met resultaten bevat?
Twee queryies? Bah!

Ik zou de boel op tijd gesorteerd inlezen, de eerste tien id's in een eenvoudig array zetten en de boel vervolgens met PHP's sorteerfunctie sorteren.

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:28

momania

iPhone 30! Bam!

Verwijderd schreef op 20 oktober 2004 @ 15:57:
[...]


Twee queryies? Bah!

Ik zou de boel op tijd gesorteerd inlezen, de eerste tien id's in een eenvoudig array zetten en de boel vervolgens met PHP's sorteerfunctie sorteren.
Ik denk dat als de lijst wat groot wordt je beter wel 2 queries kan doen.
De database kan het veel sneller sorteren dan php code ;)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

momania schreef op 20 oktober 2004 @ 15:59:
Ik denk dat als de lijst wat groot wordt je beter wel 2 queries kan doen.
De database kan het veel sneller sorteren dan php code ;)
Dat laatste betwijfel ik, maar het feit dat je mogelijk met grote hoeveelheden data lokaal moet manipuleren is inderdaad wel eennadeel.
Pagina: 1