Hoi mensen,

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
misschien zo iets
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
tnx :D

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 :$)
@Erwin..

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 ;)
Heb nog even een probleem met mijn query
Ik heb nu dit om de tutorial pagina uit de database te trekken:


$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."'";


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.


$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";


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 ;)

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 :$)
misschien zo iets als je het in 1 query wil

$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."'";

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
Woei, dat zijn nog een query's (Heel netjes (Y)) En het werkt prima, Tnx :D

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"
reden 2 aparte query's is omdat je die count maar 1 keer nodig hebt en nu steeds word uitgevoerd voor elke result beetje overkill

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
Ah ok, i see..

Tnx man, ik kan weer vooruit... Mijn dank is groot

Reageren