/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Find højeste ID fra inner join
Fra : Martin


Dato : 22-07-09 19:40

Hej..

Kan ikke lige få denne til at makke ret

2 tabeller
user tabel
id (int, auto increment, primary)
expire (date)
hasPaid (enum Y/N)

orders tabel
id (int, auto increment, primary)
user_id (key til user tabel)
description (varchar)
date_added (datetime)
isPaid (enum Y/N)

SELECT
   u.id AS user_id,
   o.description AS transaction,
   o.id AS order_id
FROM
   tbl_user AS u
INNER JOIN
   tbl_orders AS o
ON
   o.user_id = u.id
WHERE
   (NOW() >= u.expire OR u.expire IS NULL)
   AND
   o.isPaid = "Y"
   AND
   u.hasPaid = "Y"
GROUP BY
   u.id
ORDER BY
   o.date_added DESC, u.id

Dog så henter den med laveste id fra orders tabel, her vil jeg gerne
have den højeste - jeg har prøvet både med o.date_added ASC/DESC men
ingen ændring.

Hvad gør jeg forkert?

 
 
Gert Krabsen (22-07-2009)
Kommentar
Fra : Gert Krabsen


Dato : 22-07-09 20:37

Martin skrev:
> Hej..
>
> Kan ikke lige få denne til at makke ret
>
> 2 tabeller
> user tabel
> id (int, auto increment, primary)
> expire (date)
> hasPaid (enum Y/N)
>
> orders tabel
> id (int, auto increment, primary)
> user_id (key til user tabel)
> description (varchar)
> date_added (datetime)
> isPaid (enum Y/N)
>
> SELECT
>    u.id AS user_id,
>    o.description AS transaction,
>    o.id AS order_id
> FROM
>    tbl_user AS u
> INNER JOIN
>    tbl_orders AS o
> ON
>    o.user_id = u.id
> WHERE
>    (NOW() >= u.expire OR u.expire IS NULL)
>    AND
>    o.isPaid = "Y"
>    AND
>    u.hasPaid = "Y"
> GROUP BY
>    u.id
> ORDER BY
>    o.date_added DESC, u.id
>
> Dog så henter den med laveste id fra orders tabel, her vil jeg gerne
> have den højeste - jeg har prøvet både med o.date_added ASC/DESC men
> ingen ændring.
>
> Hvad gør jeg forkert?


Et gæt:

ORDER BY
   o.date_added DESC, u.id DESC


eller
ORDER BY
    u.id DESC, o.date_added DESC


afhængigt af formålet..

Stig Johansen (22-07-2009)
Kommentar
Fra : Stig Johansen


Dato : 22-07-09 21:44

Martin wrote:

.....
> SELECT
> u.id AS user_id,
> o.description AS transaction,
> o.id AS order_id
.....
> ORDER BY
> o.date_added DESC, u.id
>
> Dog så henter den med laveste id fra orders tabel, her vil jeg gerne
> have den højeste - jeg har prøvet både med o.date_added ASC/DESC men
> ingen ændring.
>
> Hvad gør jeg forkert?

Prøv at tilføje o.date_added i din SELECT.
Den indgår ikke i resultsættet, så måske er det derfor den ikke virker.

--
Med venlig hilsen
Stig Johansen

Leif Neland (28-07-2009)
Kommentar
Fra : Leif Neland


Dato : 28-07-09 12:58


"Martin" <martin@aarhof.invalid> skrev i en meddelelse
news:4a675d2a$0$48232$14726298@news.sunsite.dk...
> Hej..
>
> Kan ikke lige få denne til at makke ret

Jeg koger lige tabellerne ned til det væsentlige
>
> 2 tabeller
> user tabel
> id (int, auto increment, primary)
>
> orders tabel
> id (int, auto increment, primary)
> user_id (key til user tabel)
>
> SELECT
> u.id AS user_id,o.id AS order_id
> FROM tbl_user AS u
> INNER JOIN tbl_orders AS o
> ON o.user_id = u.id
> GROUP BY u.id
> ORDER BY o.date_added DESC, u.id
>
> Dog så henter den med laveste id fra orders tabel, her vil jeg gerne
> have den højeste - jeg har prøvet både med o.date_added ASC/DESC men
> ingen ændring.
>
> Hvad gør jeg forkert?

Det må være MySql, du bruger.
Du gør noget fyfy
Du grouper på u.id, men har ingen gruppe-funktion på tbl_orders, så MySql
tager bare en tilfældig række fra tbl_orders, der har det rette user_id.
MsSql vil bare brokke sig og dø...

Alle kolonnerne i en GROUP BY skal enten være I group by-linien, eller være
en gruppe-funktion som sum(), max(), min() etc.

Hvis det er det højeste fakturanr du vil have, er det altså
SELECT o.user_id.max(o.id) FROM ...
GROUP BY u.id

Når du så har ordre_id, må du lave endnu et select for at få
ordredetaljerne.
Enten i oppe i php, eller ved at joine med ordretabellen endnu en gang,
selvom jeg ikke er sikker på man kan joine på max(o.id).

Leif



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste