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