Toon posts:

[mysql] limiteren op 'items' en niet op subitems

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb mijn vraag eerst maar eens op klad gezet in notepad om hopelijk zo zelf het antwoord te kunnen krijgen, maar dat bleek voor mij persoonlijk nogal moeilijk te zijn dus daarom paste ik mijn kladblok hiero maar even. Mischien dat iemand hier een leuke en gepaste oplossing heeft.

// Tabel voor de 'items', niet alles staat er in maar boeie

code:
1
2
3
4
5
6
CREATE TABLE item (
  id mediumint(8) unsigned NOT NULL auto_increment,
  tree_id smallint(5) unsigned NOT NULL default '0',
  user_id smallint(5) unsigned NOT NULL default '0',
  title varchar(255) NOT NULL default '',
) TYPE=MyISAM;


// Tabel voor de 'subitems', wederom heb ik niet alles gepasted

code:
1
2
3
4
5
6
CREATE TABLE subitems (
  id mediumint(8) unsigned NOT NULL auto_increment,
  item_id mediumint(8) unsigned NOT NULL default '0',
  type_id tinyint(1) unsigned zerofill NOT NULL default '0',
  filename varchar(128) NOT NULL default '',
) TYPE=MyISAM;


// Array van de types

code:
1
2
3
0 => Unknown  => unknown.gif
1 => KaZaA    => kazaa.gif
2 => E-Donkey => edonkey.gif


nu wil ik een query doen op alle items en daarvan wil ik
tegelijk uitlezen de types van de subitems en wanneer ik
het zo doe krijg ik dus alle 'types'

code:
1
2
3
4
5
6
7
8
SELECT
    distinct(subitem.type_id),
    item.*
FROM
    item,
    subitem
WHERE
    subitem.item_id = item.id


maar dan krijg ik het volgende bv

code:
1
2
3
4
5
6
type_id, id, tree_id, user_id, title
   1      1      1       1     mijn titel
   2      1      1       1     mijn titel
   1      2      1       1     onderwerp new
   2      3      1       1     onderwerp test
   1      4      1       1     onderwerp


dat is natuurlijk heel erg mooi :) zou je denken maar nu zit ik
met het volgende, ik wil per pagina 30 items laten zien.. ok!

Simpel zou je zeggen limit 0, 30 FOUT want dan reken je ook
het aantal 'types mee kan je niet altijd 30 per pagina hebben
dus 30x een unique id per pagina.

Hoe kan ik dit oplossen?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
je database normaliseren? :)

maak er 2 tabellen van: Item en type.

type ziet er dan zo uit:

code:
1
2
3
4
item_id, type_id
1,           4
1,           2
2,           4

Verwijderd

Topicstarter
nee onmogelijk :) ik heb namelijk 1 nodig voor de items (bv topics) en de andere voor de subitems (bv topics :P)... en wil gewoon de type van de posts weten maar dan geditinct op type ;) bv :P

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Ik vind het maar een vaag verhaal, sorry.
en wil gewoon de type van de posts weten maar dan geditinct op type
bedoel je niet gewoon een GROUP BY?

En van het "30 per pagina" verhaal ontgaat mij de clue ook even.

Today's subliminal thought is:


Verwijderd

Topicstarter
Annie schreef op 03 May 2003 @ 12:33:
Ik vind het maar een vaag verhaal, sorry.
Ik heb me best der op gedaan :{
bedoel je niet gewoon een GROUP BY?
Nee want als ik een group by id doe krijg ik alleen maar 1 id met 1 type.
En van het "30 per pagina" verhaal ontgaat mij de clue ook even.
als ik nu iets fetch krijg ik de item info + voor iedere unique subitem deze info. maar niet iedere item heeft 2 subitems (unique items, maar soms ook 3 of 1) dussuh moet ik een limit van groter dan 30 doen wil ik genoeg items krijgen :?

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
gebruik een COUNT column?

Verwijderd

Topicstarter
en waarvoor zou die nut hebben als ik vragen mag? voor items of subitems? niet voor subitems want type_id kan dus 3 types bevatten per item en indien er 1 van 1 is en 3 van 2 en 1 van 3 wil ik terug krijgen 1,2,3.

Ik zal nog eens meer uitleggen wat ik bedoel..

Ik lees nu een items lijst uit op dit moment waarin wat informatie staat

bv.

id, titel, auteur, datum, comment

nu moet ik voor iedere fetch van deze gegevens nogmaals een query doen om uit te lezen wat voor types de 'subitems' zijn met een query zoals dit

code:
1
2
3
4
5
6
SELECT
    distinct(subitem.type_id)
FROM
    subitem
WHERE
    item_id = id


dan krijg ik gelijk een array met de verschillende types die er in zitten slechts 1x per type. Deze 2 queries wil ik graag aan elkaar verbinden want de 1e query kan ik limiteren en voor iedere fetch een andere query doen, maar dat is nogal veel queries per page.. voor iedere 30 items 31 queries :{

Dus ik zoek hier een oplossing voor..

[ Voor 65% gewijzigd door Verwijderd op 03-05-2003 17:25 ]


Verwijderd

Topicstarter
ik heb nog iets gevonden op de mysql site maar kan dit zelf niet echt begrijpen, mischien dat dit wel kan helpen bij mijn query
gevonden op mysql site
In some cases a GROUP BY can be resolved by reading the key in order (or do a sort on the key) and then calculate summaries until the key value changes. In this case LIMIT # will not calculate any unnecessary GROUP BYs.
kan iemand me dit mischien beter uitleggen? :D

Verwijderd

Topicstarter
jammer dat ik het niet anders kan oplossen, ik heb nu het uitgewerkt met 2 queries

de 1e querie leest gewoon alle items uit

code:
1
2
3
4
SELECT
    item.*
FROM
    item


for next code waarmee ik alles in een array stop ;) en de id's verzamel

met de 2e querie lees ik alle subitem types uit

code:
1
2
3
4
5
6
7
SELECT
    distinct(subitem.type_id),
    subitem.item_id
FROM
    subitem
WHERE
    subitem.item_id IN (1,<hier dus de uitgelezen id's>, 70)


als voorbeeld dan wel te verstaan, nogmaals jammer dat dit niet mogelijk was dmv jullie hulp maar tja ik heb een tijdelijke oplossing!

Bedankt Zef en ACM voor jullie geduldige geduld! :)

[ Voor 16% gewijzigd door Verwijderd op 04-05-2003 19:09 . Reden: kleine addje ]

Pagina: 1