ORDER BY $variabele
Ik heb een vraagje.
Ik wil uit meerdere tabellen gegevens halen en de resultaten met
while printen, maar dus ook ordenen op iets, maar de 2 gegevens
staan in verschillende tabellen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = mysql_query("SELECT * FROM gebruikers WHERE login='$user'");
$user = mysql_fetch_object($query);
$punten = $user->punten1 + $user->punten2;
$query2 = mysql_query("SELECT * FROM gegevens WHERE actie='1' ORDER BY '$punten'");
$resultaat = mysql_fetch_object($query2);
// De rest
?>
$query = mysql_query("SELECT * FROM gebruikers WHERE login='$user'");
$user = mysql_fetch_object($query);
$punten = $user->punten1 + $user->punten2;
$query2 = mysql_query("SELECT * FROM gegevens WHERE actie='1' ORDER BY '$punten'");
$resultaat = mysql_fetch_object($query2);
// De rest
?>
Maar die $query2 wordt dus niet goed uit de database geselecteerd.
Is er nog een andere manier om de resultaten alsnog op de variabele $punten te ordenen?
Bij voorbaat dank,
Ricolo
Gewijzigd op 01/01/1970 01:00:00 door Ricolo
Wat moet ik me dan voorstellen bij ORDER BY 3, of ORDER BY 12?
Van hoog naar laag...
In dat geval dien je de kolom actie van je tabel even te wijzigen naar int ipv text.
Zoals ik het begrijp wil je dingen samevoegen uit twee tabellen en op 1 regel naast elkaar afdrukkken op het scherm.
Zoals je nu de gegevens in de tabellen hebt denk ik dat je het zo hebt gemaakt dat het aantal punten uit tabel 'gegevens' de som is van de punten in tabel 'gebruikers'. Hoe moet tabel 'gegevens' nu weten dat de user hoort bij een actie/puntenhoeveelheid?
M.i. zijn die dus niet gekoppeld.... Het lijkt me dat je dat eerst zal moeten doen. Dus een extra kolom in 'gebruikers' met een userid (=oplopend getal, primary key). En diezelfde userid-kolom ook bijvoegen in de gegevens tabel. En dan is het niet meer zo moeilijk...
Maar bestaat er dan geen andere manier om iets
op hoeveelheid te ordenen zonder dat je ze geordend
uit de database haalt.
Ik doel op dit:
Gegevens uit de database: 112, 3973, 18, 554, ...
Dat deze getallen zo worden geordend:
3973
554
112
18
Begrijp je?
Uhm... ORDER BY punten DESC ?
Die punten komen uit een andere tabel...
Dus dan kan het niet...
Hebben de 2 tabellen een relatie met elkaar? Dus kan je JOIN gebruiken?
Of bevatten beide tabellen een kolom met getallen waarop je wil ordenen? Dan kan je gebruik maken van UNION.
Misschien is het handig om je tabel structuur even weer te geven en om aan te geven waarop je precies wil ordenen.
Mijn script ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = mysql_query("SELECT * FROM gebruikers WHERE login='$user'");
$user = mysql_fetch_object($query);
$punten = $user->punten1 + $user->punten2;
$query2 = mysql_query("SELECT * FROM gegevens WHERE actie='1' ORDER BY '$punten'");
$resultaat = mysql_fetch_object($query2);
// De rest
?>
$query = mysql_query("SELECT * FROM gebruikers WHERE login='$user'");
$user = mysql_fetch_object($query);
$punten = $user->punten1 + $user->punten2;
$query2 = mysql_query("SELECT * FROM gegevens WHERE actie='1' ORDER BY '$punten'");
$resultaat = mysql_fetch_object($query2);
// De rest
?>
De tabel gebruikers bevat alle gegevens over de users en heeft twee velden hierin (allebei INT velden) met de punten (1 en 2).
Uit de tabel gegevens worden precies die spelers gehaald waar de actie (INT veld) op 1 staat, die spelers worden geprint,
maar moeten geordend worden op het aantal punten dat ze hebben.
Ohja, in gegevens staan ook alle users en ik haal dus gegevens uit 2 usertabellen...
Een lijstje met gegevens over gebruikers uit de tabellen gebruikers en gegevens, geordend op punten?
Wil je niet gewoon een uitdraai hebben van gegevens met actie = 1 geordend op punten? Maar deze punten staan in de gebruikerstabel.
Je moet dan een relatie aanbrengen tussen de tabel gebruiker en gegevens.
GEBRUIKER
--------------
gebruikerId
punten1
punten2
login
enz
GEGEVENS
------------
gegevensId
gebruikerId
actie
enz
Nu kan je met een SELECT en JOIN een mooi geordend lijstje krijgen
SELECT gebruiker.*, gegevens.*, punten1 + punten2 AS aantal_punten
FROM gebruiker
INNER JOIN gegevens ON (gebruiker.gebruikerId = gegevens.gebruikerId)
WHERE actie = 1
ORDER BY aantal_punten
Ik neem aan dat actie een int veld is. Als het een varchar veld is, dan is het
WHERE actie = '1'
Gewijzigd op 01/01/1970 01:00:00 door Barman V
Barman, ook jij treft de spijker op de kop.
Naar deze functies (INNER JOIn enzo) was ik inderdaad naar op zoek.
Ik ga het nu uitproberen, bedankt voor je moeite Barman,
de rest natuurlijk ook!