Hoi,
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:

<?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
?>

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
$punten is de som van ... dus een getal.
Wat moet ik me dan voorstellen bij ORDER BY 3, of ORDER BY 12?
Ja, dat het dus op een getal geordend wordt.

Van hoog naar laag...
Waar doel je precies op? Dat als je de uitkomsten krijgt er niet komt te staan 1,2,3,4,5,6,7,8,9,10 maar bijv 1,10,2,3,4,5,6,7,8,9 ?
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...
Nja, Eric, eigenlijk heb je wel gelijk.

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 ?
Douwe M, dat is juist het probleem.

Die punten komen uit een andere tabel...
Dus dan kan het niet...
Volgens mij begrijp je niet goed hoe de ORDER BY werkt in SQL.

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.
Barman, deze functies waren mij nog onbekend en waarschijnlijk ben ik ook op zoek naar deze functies.

Mijn script ziet er zo uit:
<?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
?>

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...
Wat wil je nu uiteindelijk hebben?

Een lijstje met gegevens over gebruikers uit de tabellen gebruikers en gegevens, geordend op punten?
Resume:
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'

Reageren