pagina's voor tutorials
Ik heb even een vraagje waar ik al een hele tijd mee loop.
Ik wil tutorials gaan schrijven die met een database werkt.
Nu wilde ik graag met verschillende pagina's (pagina nummers) voor de tutorials gaan werken zodat de tutorial niet 1 grote lap text word.
Hoe is dit het beste dit te doen, database design, etc... Ik heb er al vaak overna gedacht maar ben nog niet op een goeie oplossing gekomen
table Tutorial
int tutorialId
varchar naam
table TutorialPagina
int id
int tutorialId
int paginaNr
text tekst
link tussen tussen de tutorialid's kan je ze zo opvragen
Gewijzigd op 01/01/1970 01:00:00 door Felix b
Daar kan ik denk ik wel wat mee.. ik ga er even mee spelen
PS:
Hoe zit het met de indexes op de table TutorialPagina?
Moet ik indexes zetten op het ID, TutorialId, en het paginaNr ?
(indexes ben ik niet zo heel goed in :$)
Lol, Linkie 3 is van mezelf, die heb ik zelf hier gepost. Het pagina nummer ding voor gastenboeken, fora etc snap ik wel, ik zat alleen met hoe de data van de tutorial op te splitsen. De database design komt er dan iets anders uit te zien ;)
Ik heb nu dit om de tutorial pagina uit de database te trekken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$sql = "SELECT
tutorial.title,
tutorial_data.data,
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'";
tutorial.title,
tutorial_data.data,
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'";
Dit werkt prima om de geselecteerde pagina uit de database te trekken van de geselecteerde tutorial.
Nu wil ik alleen nog het aantal pagina's dat bij de tutorial horen erbij hebben zodat ik pagenation op kan maken.
De query die ik hiervoor wilde gebruiken is als volgt, maar die werkt niet omdat ik in de WHERE Clause ook het pagina nummer ($page) heb staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql = "SELECT
tutorial.title,
tutorial_data.data,
COUNT(tutorial_data.id) AS num
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'
GROUP BY
tutorial.id";
tutorial.title,
tutorial_data.data,
COUNT(tutorial_data.id) AS num
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'
GROUP BY
tutorial.id";
Als ik in de WHERE Clause van de query het pagina nummer ($page) weg haal krijg ik wel het aantal pagina nummers dat de tutorial hoort in het resultaat mee, maar dan pakt ie altijd pagina 1 van de tutorial.
Iemand een oplossing, of moet ik dit met een apparte query doen ?
PS: De vraag over de indexes bestaat nog altijd ;)
Quote:
Hoe zit het met de indexes op de table TutorialPagina?
Moet ik indexes zetten op het ID, TutorialId, en het paginaNr ?
(indexes ben ik niet zo heel goed in :$)
Moet ik indexes zetten op het ID, TutorialId, en het paginaNr ?
(indexes ben ik niet zo heel goed in :$)
Gewijzigd op 01/01/1970 01:00:00 door The Beeding Clown
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$sql ="
SELECT tutorial.title,
tutorial_data.data,
(
SELECT
COUNT(tutorial_data.id)
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
GROUP BY
tutorial.id
) AS num
FROM tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'";
SELECT tutorial.title,
tutorial_data.data,
(
SELECT
COUNT(tutorial_data.id)
FROM
tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
GROUP BY
tutorial.id
) AS num
FROM tutorial
INNER JOIN
tutorial_data
ON
tutorial.id = tutorial_data.tut_id
WHERE
tutorial.id='".$id."'
AND
tutorial_data.page = '".$page."'";
maar als ik jou was gewoon 2 query's runnen
weet niet of ik hem helemaal correct heb getypt maar kan de sql natuurlijk niet uitesten
Tutorial
int tutorialId <- primary key
varchar naam
table TutorialPagina
int id <- primary key
int tutorialId
int paginaNr
text tekst
is genoeg
Gewijzigd op 01/01/1970 01:00:00 door Felix b
Wat is het voordeel van 2 losse query's te runnen ipv 1? Ik neem aan dan 1 query sneller is dat de 2 losse.
PS: Nog even over de indexes, de regel is geloof ik toch:
"Alles wat je in je WHERE Clause gebruikt moet je een index op zetten"
Gewijzigd op 01/01/1970 01:00:00 door The Beeding Clown
je kan misschien index zetten op tekst als je naar dingen binnen je tutorial gaan zoeken maar op autonumbering hoeft het niet dat is al een index uit zich zelf
Tnx man, ik kan weer vooruit... Mijn dank is groot