Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Row nummer ophalen om als offset te gebruiken

Pagina: 1
Acties:

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 16-11 22:01
Situatie:

Ik heb een id van een bepaald item in een tabel.
Nu wil ik de positie van dat item gebruiken als offset in de LIMIT clause.

Is het mogelijk dat te doen zonder eerst alles binnen te halen?

  • MrQcue
  • Registratie: Januari 2005
  • Laatst online: 19-11 19:08
Ik neem aan dat het dan dus niet om een numerieke key gaat? :)

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Maghiel schreef op donderdag 27 maart 2008 @ 18:05:
Is het mogelijk dat te doen zonder eerst alles binnen te halen?
Het aantal rijen is natuurlijk gelijk aan count(*) where id <= $id_van_dat_item. :)

Maar dan nog kan je ook gewoon direct een id >= $id where clause ipv een offset gebruiken (edit: zie toevoeging Cheatah). Extra tip: LIMIT 1000000, 10 is niet zo snel als dat het klinkt.
MrQcue schreef op donderdag 27 maart 2008 @ 18:11:
Ik neem aan dat het dan dus niet om een numerieke key gaat? :)
Of wel numeriek, maar sommige id's bestaan niet (meer).

[ Voor 3% gewijzigd door Voutloos op 27-03-2008 18:17 ]

{signature}


Verwijderd

Je kunt opvragen hoeveel entries vóór die bepaalde entry zitten met een COUNT. Dan heb je de offset.
Maar dan nog kan je ook gewoon direct een id >= $id where clause ipv een offset gebruiken.
Alleen als je op dat id sorteert natuurlijk.

[ Voor 43% gewijzigd door Verwijderd op 27-03-2008 18:16 ]


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 16-11 22:01
sorry, ben niet helemaal volledig geweest.

de query is een UNION tussen 2 tabellen. als ik dan de COUNT methode gebruik klopt het niet meer toch? want dan haalt ie minder uit de ene tabel op dan de ander, en klopt de offset niet meer.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Geef meer informatie aub, of het liefst de structuur van de query. Heb je limits in de buitenste query, en/of in de binnenste delen, is de order by in het buitensten en/of binnenste deel, is het een UNION ALL of UNION DISTINCT, etc. etc.

Maar goed, bij een union kan je net zo goed count() gebruiken, als je dus de volgorde en limits hetzelfde laat.

[ Voor 19% gewijzigd door Voutloos op 27-03-2008 18:29 ]

{signature}


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 16-11 22:01
dit is de query

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    `id`, `title`, `frontcover`, `year`, `releasedate`, `title` AS `singletitle`, 'single' AS `type`
FROM `main_singles`
    WHERE `artistid` = '9'
    AND `main_singles`.`isreleased` = '1'
    AND `main_singles`.`visible` = '1'
    AND `main_singles`.`salestartdate` <= '2008-03-27'
UNION ALL
SELECT 
    `id`, `title`, `frontcover`, `year`, `releasedate`, `title` AS `albumtitle`, 'album' AS `type`
FROM `main_albums`
    WHERE `artistid` = '9'                      
    AND `main_albums`.`isreleased` = '1'
    AND `main_albums`.`visible` = '1'
    AND `main_albums`.`salestartdate` <= '2008-03-27'
ORDER BY `year` DESC        

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 16-11 22:01
de pure mysql begon wel een erg grote query te worden door die UNION ALL.
ik heb het toch maar in de code opgelost daarom, vele malen sneller.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 20:26
Het probleem is dat je met 2 tabellen werkt die dezelfde gegevens bevatten, waarom heb je die union nodig? Je kan singels en albums toch gewoon in dezelfde tabel zetten?!
Pagina: 1