2 query's samenvoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jan Horden

Jan Horden

17/10/2008 19:31:00
Quote Anchor link
Ik wil graag de volgende query's samenvoegen en ik krijg het niet voor elkaar.

Query 1:
SELECT reactie.* , users.type
FROM reactie, users
WHERE reactie.id = '" .$_GET["id"]. "'
AND reactie.auteur = users.gebruikersnaam
GROUP BY reactie.nr
ORDER BY reactie.nr DESC";

Query 2:
SELECT auteur, COUNT(*)
FROM reactie
GROUP BY auteur

de auteur van de 2de query hoeft niet weergegeven te worden zolang ik maar alle reacties krijg per auteur.
De eerste query laat alle reacties zijn per topic en het type gebruiker. Hier wil ik dus ook graag het aantal reacties van de gebruiker bij hebben staan!
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
PHP hulp

PHP hulp

23/11/2024 11:41:50
 
Jan Koehoorn

Jan Koehoorn

17/10/2008 19:44:00
Quote Anchor link
Om je te kunnen helpen moeten we wel even weten hoe je datamodel eruit ziet?
 
Jan Horden

Jan Horden

17/10/2008 19:52:00
Quote Anchor link
ok komt ie:
onderstreept is primairy key en tussen <> is foreign key maar foreign key's zijn niet zo gedeclareerd in phpmyadmin. Wist namelijk niet hoe dat moest.

Tabel reactie:
<id> int (dit is het topic id)
nr int AUTO_INCREMENT
reactie varchar
<auteur> varchar (fkey van gebruikersnaam)
datum DATETIME

Tabel users:
id int AUTO_INCREMENT
<gebruikersnaam> varchar
voornaam varchar
achternaam varchar
email varchar
lid_sinds DATETIME
type enum

edit: Het gaat om een forum zoals je waarschijnlijk al door had maar denk niet dat het echt relevant is.
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
Jan Koehoorn

Jan Koehoorn

17/10/2008 19:58:00
Quote Anchor link
Hmm, je datamodel klopt niet helemaal. Wat is het verschil tussen een user en een auteur bij jou?
 
Jan Horden

Jan Horden

17/10/2008 19:58:00
Quote Anchor link
niets alleen het heeft een andere naam. Is dat een probleem? auteur vond ik namelijk bij een reactie toepasselijker.

edit: vergeten te vermelden dat auteur een foreign key is van gebruikersnaam
ik neem aan dat je gebruikersnaam bedoeld met user?
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
Jan Koehoorn

Jan Koehoorn

17/10/2008 20:10:00
Quote Anchor link
Ik zou drie tabellen maken:

users
------------------
id
naam

topics
------------------
id
titel

posts
------------------
id
topic_id
user_id
dt_posted
tekst

Dan klopt je datamodel al een heel stuk beter en wordt het ook gemakkeliker om goeie query's op te stellen. Andere namen voor dezelfde entiteiten in je database raad ik je af om verwarring te voorkomen.
 
Jan Horden

Jan Horden

17/10/2008 20:14:00
Quote Anchor link
ow ja ik heb ook een tabel onderwerp maar die heb ik hier niet gepost omdat ik niet dacht dat het relevant was. Ik wil namelijk 2 query's samenvoegen en die gebruiken maar 2 tabellen. Daarom heb ik ook alleen deze 2 tabellen beschreven. Maar de onderwerp tabel is als volgt:

id int
onderwerp varchar (naam vd topic)
<auteur> varchar (weer foreign key met gebruikersnaam)
datum datetime

edit: ik weet dat bij tabel reactie topic id veel beter was geweest dan id om verwarring te voorkomen maar dit wijzig ik later wel. Dan mag ik weer het een en ander aan code omgooien namelijk...
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
Jan Koehoorn

Jan Koehoorn

17/10/2008 20:19:00
Quote Anchor link
Daarom is een goed datamodel dus zo belangrijk. Als je kijkt naar mijn voorbeeld, welke velden zou je dan precies willen hebben?
 
Jan Horden

Jan Horden

17/10/2008 20:22:00
Quote Anchor link
van posts alle (posts.*) en van users het type (staat er btw niet in ;) ) en dan nog eens het aantal posts per user.
 
Jan Horden

Jan Horden

20/10/2008 19:41:00
Quote Anchor link
kan je me dan verder helpen Jan?
 
Jan Koehoorn

Jan Koehoorn

20/10/2008 20:44:00
Quote Anchor link
Bedoel je echt alle posts, of alle posts van één topic?
 
Jan Horden

Jan Horden

20/10/2008 21:47:00
Quote Anchor link
jah per topic maar dat regel ik zelf wel... questie van WHERE reactie.id = '" .$_GET["id"]. "' (onderwerp id dus)
 
Jan Horden

Jan Horden

21/10/2008 13:01:00
Quote Anchor link
Maar het probleem waar ik mee zit is die GROUP BY. Want zodra ik ga groeperen per posts.id (in jouw model) dan krijg ik dus het aantal reacties per post en niet per gebruiker! Hoe ik dat moet omzeilen weet ik dus niet en daar heb ik je hulp dus voor nodig ;)
 
- -

- -

21/10/2008 13:03:00
Quote Anchor link
GROUP BY posts.id, users.nogwat?
 
Jan Horden

Jan Horden

21/10/2008 13:07:00
Quote Anchor link
Nee zo simpel is het helaas niet want dan groupeerd hij in eerste instantie nog per posts.id en dan pas per users.gebruikersnaam dacht ik. Iig had ik dat al geprobeerd en dat werkte niet!
 
Eddy E

Eddy E

21/10/2008 13:47:00
Quote Anchor link
En iets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT r.*, u.type, u.gebruikersnaam, COUNT(u.id) AS aantal
FROM reactie AS r
LEFT JOIN users AS u
 ON (r.auteur = u.gebruikersnaam)
WHERE r.id = ".intval($_GET['id'])."
ORDER BY r.nr DESC


?
 
Jan Horden

Jan Horden

21/10/2008 14:13:00
Quote Anchor link
dan zit je nog met het GROUP BY probleem eddy. Als ik groepeer op r.id krijg ik alle aantallen op 1 en als ik groepeer op u.id dan krijg ik niet alle reacties te zien. En die GROUP BY is verplicht
 
- -

- -

21/10/2008 14:18:00
Quote Anchor link
Je volledige query nog een keer posten helpt ook...

Je doet een count, maar die kun je natuurlijk ook anders doen.. Waarom op SQL niveau als je het ook op PHP niveau kan doen? Gewoon in je foreach/while een counter plaatsen ;)
 
Jan Horden

Jan Horden

21/10/2008 14:23:00
Quote Anchor link
de volledige 2 query's staan in m'n eerste post en daarstraks heb ik de query van Eddy gebruikt en dr alleen een GROUP BY aan toegevoegd. Maar als jij mij kan vertellen hoe ik een counter in m'n while lus kan plaatsen dan ben ik natuurlijk ook tevreden. Ik dacht alleen dat dit niet ging.
 
Rens nvt

Rens nvt

21/10/2008 14:47:00
Quote Anchor link
iChris schreef op 21.10.2008 14:18:
Je doet een count, maar die kun je natuurlijk ook anders doen.. Waarom op SQL niveau als je het ook op PHP niveau kan doen? Gewoon in je foreach/while een counter plaatsen ;)

eeehrm... omdat het over het algemeen sneller is alles rond het ophalen van gegevens in SQL te doen? ik heb niet de volledige thread doorgelezen, maar over het algemeen is het toch aan te raden om zoveel mogelijk op databaseniveau af te handelen
 
- -

- -

21/10/2008 15:03:00
Quote Anchor link
Klopt, maar hoogstwaarschijnlijk maak je de "standaard" query's, en geen left/right/inner joins en group by's ;)

Edit: Bij een goede server is die snelheid trouwens te verwaarlozen. Het is nog altijd MySQL, en als je niet heb genormaliseerd is het alsnog een rotzooi.
Gewijzigd op 01/01/1970 01:00:00 door - -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.