Toon posts:

[MySQL] Query om laatst uitgeleende item te vinden *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mysql probleempje

Ik ben bezig met een database waarin bijgehouden wordt wie wanneer een boek leent (een soort bibliotheek database dus)

Nu heb ik in een tabel waar voor elke keer dat een boek wordt uitgeleend een rij wordt toegevoegd. Iets als
[bookid] [lener] [date] [time]
dus

In een tweede (gebruikers) tabel wordt o.a. bijgehouden wat voor soort abb een gebruiker heeft. Zoiets als
[lener] [abbid]

Nu wil ik van alle gebruikers die het abbonnement 1 hebben, het laatste boek opvragen dat ze geleend hebben.

Nu heb ik al wel iets geprobeerd als

select tabel1.bookid, tabel1.lener from tabel1, tabel2 where tabel1.lener = tabel2.lener AND tabel2.abbid=1 order by date, time

maar dit geeft niet het juiste resultaat (wat eigenlijk ook wel logisch is :) ).

Weet iemand misschien hoe ik dit WEL moet oplossen

  • orca
  • Registratie: November 2001
  • Laatst online: 24-05 13:15

orca

Zwem goed, Broeder.....

moet je niet iets doen met unieke waarden en omgekeerd sorteren als je alleen de laatste wilt?

Ask not what your computer can do for you ! Ask what you can do for your computer ! ! !


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 27-05 08:35

BrZ

Verwijderd schreef op 10 januari 2004 @ 20:34:
Nu heb ik al wel iets geprobeerd als

select tabel1.bookid, tabel1.lener from tabel1, tabel2 where tabel1.lener = tabel2.lener AND tabel2.abbid=1 order by date, time

maar dit geeft niet het juiste resultaat (wat eigenlijk ook wel logisch is :) ).
Ten eerste wil je date en time in 1 kolom zetten (datetime), en dan sorteer je gewoon daarop, alleen daarachter nog even "DESC LIMIT 1" zetten ;)

[edit]
ow, wacht, dat werkt natuurlijk niet met meerdere gebruikers ;)

[ Voor 11% gewijzigd door BrZ op 10-01-2004 20:41 ]


Verwijderd

Topicstarter
orca schreef op 10 januari 2004 @ 20:37:
moet je niet iets doen met unieke waarden en omgekeerd sorteren als je alleen de laatste wilt?
zoiets dacht ik ook,
maar ook een
select distinct tabel1.bookid from tabel1, tabel2 where tabel1.lener = tabel2.lener AND tabel2.abbid=1 order by date desc , time desc

doet niet wat ik wil.

Verwijderd

Topicstarter
BrZ schreef op 10 januari 2004 @ 20:38:
[...]
Ten eerste wil je date en time in 1 kolom zetten (datetime)
OK :)
BrZ schreef op 10 januari 2004 @ 20:38:
[...]
en dan sorteer je gewoon daarop, alleen daarachter nog even "DESC LIMIT 1" zetten ;)
Dat werkt, als ik het laatste uitgeleende boek zou willen hebben, maar ik wil van alle gebruikers met abbonnement type 1 het laatst geleende boek weten

ik gebruik dan
select distinct tabel1.lener from tabel1, tabel2 where tabel1.lener = tabel2.lener order by datetime desc
maar krijg dan wel meerdere keren dezelfde lenersnaam terug

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 27-05 08:35

BrZ

Met een subquery is het wel te doen, alleen is MySQL het daar niet helemaal mee eens ;)

Maar even snel deze query bedacht, niet getest, zou fout kunnen zijn ;)
SELECT S.lener, table1.bookid FROM (SELECT lener, max(datum) as datum FROM table1 GROUP BY lener) S, table1, table2 WHERE S.lener = table1.lener AND S.datum = table1.datum AND table1.lener = table2.lener AND table2.abbid = 1

edit:

Hmm, denk trouwens dat deze query in MySQL 4.0+ nog gaat werken ook :+

[ Voor 13% gewijzigd door BrZ op 10-01-2004 20:54 ]


Verwijderd

Topicstarter
BrZ schreef op 10 januari 2004 @ 20:51:
Met een subquery is het wel te doen, alleen is MySQL het daar niet helemaal mee eens ;)

Maar even snel deze query bedacht, niet getest, zou fout kunnen zijn ;)
SELECT S.lener, table1.bookid FROM (SELECT lener, max(datum) as datum FROM table1 GROUP BY lener) S, table1, table2 WHERE S.lener = table1.lener AND S.datum = table1.datum AND table1.lener = table2.lener AND table2.abbid = 1

edit:

Hmm, denk trouwens dat deze query in MySQL 4.0+ nog gaat werken ook :+
Heel erg bedankt, maar ik heb niet de rechten om mijn MySQL 3.23 te upgraden.
Begrijp ik goed dat subquery's dan niet mogelijk zijn (en mijn query dus ook niet) :(

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 27-05 08:35

BrZ

Verwijderd schreef op 10 januari 2004 @ 21:11:
[...]


Heel erg bedankt, maar ik heb niet de rechten om mijn MySQL 3.23 te upgraden.
Begrijp ik goed dat subquery's dan niet mogelijk zijn (en mijn query dus ook niet) :(
Klopt. Het is op te lossen door het met 2 losse queries te doen, alleen moet die 2e dan dus meerdere keren uitgevoerd worden, wat niet echt een lekkere oplossing is.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Lees ik nou verkeerd, of gebruik je twee velden voor date en time?

Mysql heeft het datetime type. Misschien off-topic, maar gaat je wel straks schelen als je datum/tijd-vergelijkingen moet doen. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Grijze Vos schreef op 10 januari 2004 @ 22:31:
Lees ik nou verkeerd, of gebruik je twee velden voor date en time?

Mysql heeft het datetime type. Misschien off-topic, maar gaat je wel straks schelen als je datum/tijd-vergelijkingen moet doen. ;)
Lees de draad voor je blaat ;)

Professionele website nodig?


  • flexje
  • Registratie: September 2001
  • Laatst online: 27-05 20:52

flexje

got-father

Volgens mij kan je beter eerst even normaliseren. Ik weet bijna zeker dat het dan een eitje voor je is.

Bijvoorbeeld:

boek { boekID, boek_nm }
lener { lenerID, lener_nm, aboID }
boek_lener { boekID, lenerID, datum }

In access werkt:
code:
1
2
3
4
SELECT lener.aboID, lener.lener_nm, book_lener.datum, book.bookID
FROM book INNER JOIN (lener INNER JOIN book_lener ON lener.lenerID = book_lener.lenerID) ON book.bookID = book_lener.bookID
WHERE (((lener.aboID)=1))
ORDER BY book_lener.datum DESC;


Nu nog MySql :P

//offtopic
ps: kan zijn dat er ergens fouten zitten hoor, heb een beetje veel op :P

"Try not to become a man of success but rather to become a man of value..."


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 27-05 08:35

BrZ

ehm, mja, en dan?
Dan heb je een lijst met daarin alle leden die abo 1 hebben en alle boeken die ze geleend hebben, niet de laatste die iedereen geleend heeft :)
Zou me trouwens niet eens verbazen als het in MySQL nog zou werken als je distinct lener neemt ofzo, maar als je het goed wil doen moet het echt met een subquery volgens mij :?

  • flexje
  • Registratie: September 2001
  • Laatst online: 27-05 20:52

flexje

got-father

BrZ schreef op 11 januari 2004 @ 01:30:
ehm, mja, en dan?
Dan heb je een lijst met daarin alle leden die abo 1 hebben en alle boeken die ze geleend hebben, niet de laatste die iedereen geleend heeft :)
Zou me trouwens niet eens verbazen als het in MySQL nog zou werken als je distinct lener neemt ofzo, maar als je het goed wil doen moet het echt met een subquery volgens mij :?
Afbeeldingslocatie: http://www.whatsup.nl/flex/screenies/boek.jpg

Dit is toch wat ie wil? Of lees ik weer verkeerd :P

"Try not to become a man of success but rather to become a man of value..."


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 27-05 08:35

BrZ

Ja, maar hebben sommigen in jouw databaseje meerdere boeken geleend? Ik zie niets in jouw query staan wat dat eruit filtert :)

  • flexje
  • Registratie: September 2001
  • Laatst online: 27-05 20:52

flexje

got-father

BrZ schreef op 11 januari 2004 @ 01:44:
Ja, maar hebben sommigen in jouw databaseje meerdere boeken geleend? Ik zie niets in jouw query staan wat dat eruit filtert :)
Ja dat hebben ze, maar had ik niet ingevoerd.
Kijk maar:
Afbeeldingslocatie: http://www.whatsup.nl/flex/screenies/boek2.jpg

;)

"Try not to become a man of success but rather to become a man of value..."

Pagina: 1