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

[mysql] limit op left join

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik ben aan het stoeien geweest met subqueries, maar krijg het niet voor elkaar. Ik wil een LEFT JOIN gebruiken en dan per JOIN een limit van bijvoorbeeld 3, dus hij mag niet meer dan 3 items joinen. Dus als hij 10 items joint, moeten dit er maar 3 worden.

MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
  g.title,
  g.description,
  p.sub,
  p.page
FROM 
  xpv_groups g 
LEFT JOIN 
 (
   SELECT 
     id,
     sub,
     page,
     groupid 
   FROM 
     xpv_pages 
   LIMIT 3
  ) AS p
ON 
  (p.groupid=g.id)


Hij limiteert nu alles tot 3, maar da tzou per subset moeten gebeuren? Volgens mij kan dit niet of wel?

  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 21:00
Ik heb het hier ff voor je getest in SQL server en daar werkt het prima.

Was het limit statement niet 'LIMIT 0,2' oid ipv LIMIT 3?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Redshark schreef op maandag 18 februari 2008 @ 13:27:
Ik heb het hier ff voor je getest in SQL server en daar werkt het prima.
Ts wil maximaal 3 pages per group_id. ;)
Was het limit statement niet 'LIMIT 0,2' oid ipv LIMIT 3?
LIMIT 0,3 en LIMIT 3 zijn equivalent, boeit niet. Syntax: [LIMIT {[offset,] row_count | row_count OFFSET offset}]

Met enkel limit gaat dit niet lukken. Het kan wel met subqueries, unions of een handjevol andere ranzige trucs. :P

{signature}


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hij moet van bijvoorbeeld:

1 2
1 3
1 4
1 5
1 6
2 1
2 2
2 3
2 4

maken:

1 2
1 3
1 4
2 1
2 2
2 3

Maar dat doet hij bij mij echt niet! het is niet de bedoeling dat het via php gedaan wordt.. het zou mooi zijn als het in 1 query kan eventueel met subqueries... ik zat al met variabelen die de rijen tellen, maar dat werkt ook niet echt lekker.

[ Voor 40% gewijzigd door RSD op 18-02-2008 13:44 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Zoiets?
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  g.title,
  g.description,
  p.sub,
  p.page
FROM 
  xpv_groups g 
WHERE g.groupid IN
 (
   SELECT 
     id
   FROM 
     xpv_pages 
   LIMIT 3
  )

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Nee dat is hem ook niet, ik wil alle groepen afdrukken met daarin elk 3 pagina's terwijl de groep misschien wel meer dan 3 pagina's bevat in de database.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
CodeCaster geeft wel 1 van de mogelijke oplossingen, als je maar zelf het initiatief neemt om die subquery aan te passen. :/ Maak er een where clause van welke kijkt of id van pagina bij de 1e 3 van pagina's met die group zit bijvoorbeeld.

{signature}


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Volgens mij klopt die niet echt hoor die van CodeCaster? Ik kan me misschien heel erg vergissen, maar ik zie daar ook niet zo 1 2 3 een oplossing in... Want ik wil sowieso alle groepen ophalen en elke page heeft een groep aan zich gekoppeld. En daar staat dat hij de groep moet limiten.

Hij moet de pages die gejoined worden limitten tot 3 en niet allemaal weergeven.

[ Voor 42% gewijzigd door RSD op 18-02-2008 13:54 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat je moet doen als je voor een dergelijke subquery wil gaan staat in de laatste zin van mijn post. Als je die zin begrijpt cq. bijna letterlijk omschrijft naar sql ben je er al.

Het is inderdaad geen kant en klaar antwoord, maar het gaat gewoon om het idee van {primairy key} IN (select ... limit 3). Het verder voorkauwen leert niemand wat van.

[ Voor 32% gewijzigd door Voutloos op 18-02-2008 13:55 ]

{signature}


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Als ik zoiets in woorden voor me zie dan begrijp ik het vaak niet in SQL wel, maar de te bewnadelen weg is me nu nog niet echt duidelijk....

Het gaat overigens wle om 2 tabellen die ik moet joinen en daarvan het resultaat zo moet weergeven. Het weergeven van het complete resultaat lukt wel, alleen die limit erin bouwen niet echt!

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

version: 5.0.45

[ Voor 52% gewijzigd door RSD op 18-02-2008 14:14 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Dat van die subquery is dus niks...
Pagina: 1