Toon posts:

[mysql] max van reeks waardes kleiner dan iets

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem.
Ik wil een waarde opvragen uit een database die net 1 kleine moet zijn dan een bepaalde waarde.

voorbeeld

id in tabel foto = foto-groot1062538599.jpg
nu moet ik dus een rij hebben die er net onder komt en die er net bovenkomt.
Het probleem is alleen dat de id in elkaar zit met foto(timestamp).jpg. Er zit dus wel een rangschikking in, maar hoe krijg ik het voor elkaar om dit met mysql op te vragen?
PHP:
1
2
3
4
5
<? php 

$fotovorig = mysql_query("select * from foto where id < '$fotofile'") or die(mysql_error());

?>

Ik heb het ook al op de volgende manier geprobeerd, maar dat werkte dus ook niet
PHP:
1
2
3
<? php 
$fotovorig = mysql_query("select max(id)  from foto where id < '$fotofile'") or die(mysql_error());
?>

De oplossing zal wel makkelijk zijn, maar ik zie hem toch echt niet.

  • MikeN
  • Registratie: April 2001
  • Laatst online: 21-08 19:33
Iets met:
code:
1
WHERE id = 'foto-groot1062538599.jpg' OR id = 'foto-groot1062538598.jpg'

etc. is ook geen optie?

Verwijderd

Topicstarter
nope de timestamp is van het moment dat de foto geupload is. de volgende foto heeft als naam foto-groot1062538492.jpg.

er zit dus enige tijd tussen de foto's en daarom verschillen de timestamps ook veel van elkaar. een +1 of -1 voor volgende en vorige werkt dus niet :(

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54

Een alias gebruiken en de HAVING gebruiken.

Filteren op een aggregated column doe je niet in de WHERE clausule, maar in de HAVING.


Eh, ff verkeerd gelezen. MySQL zal wel string - funties hebben zeker of regexen waarmee je dat id uit die string kunt halen.
Verder is het eigenlijk een ranzige manier om het zo op te lossen.
Waarom hou je gewoon geen extra column bij met daarin gewoon de timestamp?

[ Voor 145% gewijzigd door whoami op 03-09-2003 22:33 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
die timestamp heb ik ook, maar dan zit ik nog met het feit dat die timestamp met een redelijke interval in de database staat.

Hij blijft gewoon de kleinste id en eventueel timestamp pakken :(

[ Voor 23% gewijzigd door Verwijderd op 03-09-2003 22:48 ]


Verwijderd

Topicstarter
PHP:
1
2
3
$fotovorig = mysql_query("select id, tijd from foto group by id DESC having max(tijd)<'$fotofile[tijd]' ") or die(mysql_error());
        
        $fotovorig1r = mysql_fetch_assoc($fotovorig);


dit schijnt het wel te doen, maar het is nog niet helemaal perfect

  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 20-08 18:23
Werkt dit?

SELECT id FROM foto WHERE timestamp<'1062538599' ORDER BY timestamp DESC LIMIT 1

Zo sorteer je aflopend op timstamp, alleen beneden een bepaalde tijd, maximaal 1 rij

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
hmmm...

voor de volgende foto kan je zoiets doen als:
select * from foto where left(right(id,14),10) > $fotofile limit 1

Verwijderd

Topicstarter
voor de vorigefoto
PHP:
1
2
3
           $fotovorige = mysql_query("select id, tijd from foto group by id having MIN(tijd)>'$fotofile[tijd]' ") or die(mysql_error());
        
        $fotovorig1r = mysql_fetch_assoc($fotovorige);


voor de volgende foto

PHP:
1
2
3
           $fotovolgende = mysql_query("select id, tijd from foto group by id DESC having max(tijd)<'$fotofile[tijd]' ") or die(mysql_error());
        
        $fotovolgende1r = mysql_fetch_assoc($fotovolgende);


Het werkt al :)

Bedankt voor de hulp. Optimalisatie komt later wel :D

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Wat is dat hier de laatste tijd. Ik zie hier meer en meer GROUP BY statements met een DESC keyword. Dat MySQL dat slikt zeg....

Waarom heb je trouwens een group by statement staan, als je niet eens een aggregated function (zoals MIN(), MAX(), .... ) gebruikt?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Omdat er een HAVING in zit.
Van "Het SQL leerboek"
"algemene regel voor de HAVING-component"
Elke colomspecificatie, die in de HAVING-component gespecificeerd is, mag uitsluitemd binnen een SET-functie voorkomen of moet voorkomen in de lijst van kolommen van de GROUP BY-component

[ Voor 7% gewijzigd door Verwijderd op 04-09-2003 10:17 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Een having heb je nodig als je wilt filteren op aggregated functions.
Een group by heb je nodig als je aggregated functions hebt.

Je hebt geen group by, en dus ook geen having nodig als je geen aggregated functions hebt. En jij hebt geen aggr. functions.

https://fgheysels.github.io/

Pagina: 1