in 1 tabel komt 2 keer de usersID voor
Zie mij tabellen:
followID transactie_id usersID transactie_amount pay_date
1 1423 140 91 2012-02-13 08:16:44
2 1424 140 150 2012-02-13 09:16:44
hint: zoek is op DISTINCT en MAX
Jeroen vd op 13/02/2012 16:08:25:
hoezo een id (unieke waarde) twee keer voor laten komen? maar dat terzijde.
Als ik zo naar de tabelopbouw kijk is het een vreemde sleutel en dan hoeft het geen unieke waarde te zijn.
De TS zou gebruik moeten maken van ORDER BY op basis van 'pay_date'.
Uit de vraagstelling wordt het niet echt duidelijk of de TS de rij wilt zien met de laatste datum/tijd, of de rij wilt zien met de laatste datum/tijd van een gebruiker.
Edit:
Zoiets zou de query kunnen zijn:
Gewijzigd op 13/02/2012 16:41:19 door Elwin - Fratsloos
volgens mij wilde de TS ervoor zorgen dat niet alle records met een bepaalde id voorkwam, maar er maar eentje wilde selecteren
SELECT
users.id ,
users.user_level ,
users.address ,
users.zipcode ,
users.city ,
users.tel ,
users.fax ,
users.country ,
users.website ,
users.kvk ,
users.btw ,
users.sector ,
admin_muteren.ID ,
admin_muteren.daysFORFREE ,
admin_muteren.preSALES ,
admin_muteren.accountONHOLD ,
admin_muteren.payACCOUNT_1 ,
admin_muteren.payACCOUNT_2 ,
admin_muteren.payACCOUNT_3 ,
admin_muteren.payACCOUNT_4 ,
admin_muteren.payACCOUNT_5 ,
admin_muteren.freeSEARCHACCOUNT ,
admin_muteren.paySEARCHACCOUNT_1 ,
transactions.pay_date ,
transactions.usersID ,
MAX (transactions.followID)
FROM users JOIN transactions
INNER JOIN admin_muteren
ON users.id = transactions.usersID
WHERE users.id='$_SESSION[user_id]'
Want ik neem aan dat je wil dat je het record wat hierbij hoort wilt krijgen, maar dat zal niet zo zijn. MySQL zal bij elk record het maximum id meegeven, of uberhaupt maar een record, waarbij de waarde in de MAX kolom niet noodzakelijkerwijs dat id zal zijn. Run maar eens de volgende query en kijk of het klopt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
users.username
transactions.transactiondate
FROM
users
JOIN
transactions
ON
users.id = transactions.usersid
WHERE
users.id = 'someid'
AND
transactions.folowID =
(SELECT MAX(folowID) FROM transactions
WHERE
userid='someid'
GROUP BY
userid);
users.username
transactions.transactiondate
FROM
users
JOIN
transactions
ON
users.id = transactions.usersid
WHERE
users.id = 'someid'
AND
transactions.folowID =
(SELECT MAX(folowID) FROM transactions
WHERE
userid='someid'
GROUP BY
userid);
edit:
Nog iets eenvoudiger
Gewijzigd op 13/02/2012 17:46:17 door Ger van Steenderen
Ik denk dat er nog iets nodig is in het laatste deel van je WHERE clause. Zoals het er nu staat kunnen er meerdere records geselecteerd worden in de subquery.
Edit: al aangepast
Gewijzigd op 13/02/2012 17:43:26 door Erwin H
@Michiel:
Zoals jij de admin_mutate tabel joined kan nooit goed gaan (als je al geen error krijgt)