[PHP/MySQL] Opgevraagde gegevens filteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de topictitel maar zo duidelijk mogelijk gemaakt, maar ik wil graag het volgende.

Ik zit nu met 2 rijen van 10 database entries.
De eerste rij gegevens bestaat uit de tien hoogste entries, gesorteerd op "gespeeld":
PHP:
1
2
3
4
5
6
echo '<ul>';
$query = mysql_query("SELECT naam,id FROM onlinegame WHERE cat_id='1' ORDER BY naam ASC") or die("Bad query");
while($game = mysql_fetch_assoc($query)){
echo '<li><a href="speel.php?id='.$game['id'].'" target="_blank">'.$game['naam'].'</a></li>';
                          }
echo '</ul>';


De 2e rij is hetzelfde, maar haalt 10 entries met de hoogste avgrating uit de database:

PHP:
1
2
3
4
5
6
echo '<ul>';
$query = mysql_query("SELECT naam,id FROM onlinegame WHERE gestemd>5 ORDER BY avgrating DESC LIMIT 10") or die("Bad query");
while($game = mysql_fetch_assoc($query)){
echo '<li><a href="speel.php?id='.$game['id'].'" target="_blank">'.$game['naam'].'</a></li>';
                          }
echo '</ul>';



Nu is mijn vraag, wat is de beste oplossing, om ervoor te zorgen dat een entry niet dubbel verschijnt, dus niet in allebéi de lijsten. Ik zou graag de lijst die sorteert op avgrating "voorrang" geven. Ik kom er als beginner niet uit.

Acties:
  • 0 Henk 'm!

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Als je Query2 voorrang wil geven, dan verander je Query1 in dit:

code:
1
SELECT naam,id FROM onlinegame WHERE cat_id='1' AND gestemd < '5' ORDER BY naam ASC


Zo lijkt het me opgelost?

Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Upsal schreef op dinsdag 01 november 2005 @ 22:27:
Als je Query2 voorrang wil geven, dan verander je Query1 in dit:

code:
1
SELECT naam,id FROM onlinegame WHERE cat_id='1' AND gestemd < '5' ORDER BY naam ASC


Zo lijkt het me opgelost?
Jouw oplossing is niet wat Rizz0 wil bereiken.
Rizz0, waarom combineer je deze 2 queries niet?

[ Voor 10% gewijzigd door dip op 01-11-2005 22:31 ]

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
je kan idd het beste de queries samenvoegen en dan DISTINCT gebruiken

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De queries staan in 2 verschillende delen van mijn HTML, de php houdt daartussen dus op en dan open ik weer een nieuwe. Lijkt me moeilijk om op deze manier te queries samen te voegen?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Queries horen sowieso niet tussen je HTML. Zet ze dan in aparte functies die je vanuit je HTML aanroept.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Michali schreef op donderdag 03 november 2005 @ 09:18:
Queries horen sowieso niet tussen je HTML. Zet ze dan in aparte functies die je vanuit je HTML aanroept.
true, maar dit helpt de topicstarter niet.

@TS:
je zult als je resultaten op DB niveau wilt vergelijken toch de twee queries samen moeten voegen OF je moet met subquery's gaan werken.

je kunt dus zeggen WHERE NOT IN (<subquery>)


maar:
in jouw verhaal zou ik juist willen dat ze dubbel voorkomen. Wanneer je 2 lijsten laat zien op je site (zoals ik denk dat het nu is) mogen er best dingen 2x voorkomen.
dit omdat je lezers anders het idee krijgen dat de resultaten niet zijn wat ze zouden moeten zijn (en dat klopt ook)
maar dat is mijn mening natuurlijk ;)

[ Voor 28% gewijzigd door BasieP op 03-11-2005 10:11 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 02 november 2005 @ 23:38:
De queries staan in 2 verschillende delen van mijn HTML, de php houdt daartussen dus op en dan open ik weer een nieuwe. Lijkt me moeilijk om op deze manier te queries samen te voegen?
Zou het toch samenvoegen als ik jou was. Work-arounds zijn er wel te vinden lijkt me, hoe je structuur ook is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    olg.id DISTINCT,
    olg.naam
FROM
    onlinegame AS olg
WHERE
    olg.cat_id = 1 ||
    olg.gestemd > 5
ORDER BY
    olg.cat_id DESC,
    olg.gestemd DESC,
    olg.naam ASC


Niet getest, dus heb geen idee of het werkt. Lijkt me echter wel een goede gedachtengang, deze query. Ben er vanuit gegaan dat waar gestemd > 5, cat_id == 0 Succes!

[ Voor 5% gewijzigd door Verwijderd op 03-11-2005 10:52 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
BasieP schreef op donderdag 03 november 2005 @ 10:07:
[...]


true, maar dit helpt de topicstarter niet.

@TS:
je zult als je resultaten op DB niveau wilt vergelijken toch de twee queries samen moeten voegen OF je moet met subquery's gaan werken.

je kunt dus zeggen WHERE NOT IN (<subquery>)


maar:
in jouw verhaal zou ik juist willen dat ze dubbel voorkomen. Wanneer je 2 lijsten laat zien op je site (zoals ik denk dat het nu is) mogen er best dingen 2x voorkomen.
dit omdat je lezers anders het idee krijgen dat de resultaten niet zijn wat ze zouden moeten zijn (en dat klopt ook)
maar dat is mijn mening natuurlijk ;)
Zijn argument was dat de queries verdeelt zijn over verschillende scripts. Door de queries te verplaatsen naar aparte functies (met bijbehorende logica), maak je het al een stuk gemakkelijk om ze samen te voegen. Hoe je daadwerkelijk aan de gegevens komt in de functies is dat in de HTML (de template) niet echt van belang. Het enige wat wel van belang is, is dat er gegevens opgehaald worden en worden teruggegeven in een bepaald formaat (een associatieve array bijvoobeeld, of een object).

Noushka's Magnificent Dream | Unity

Pagina: 1