Archief - Meerdere records samenvoegen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Deadangel

Legacy Member
voorbeeld.png


Bon.
Als ik op een gebruiker klik ( die button ), komt daaronder een lijst met voorwerpen ( uit de databse. Het zit zo; hij leent iets, dus in het voorbeeld heeft hij 8 X 'EZEZEZ', 4 x 'lol' & 3 x 'Huls 1' geleend.

Nu zou ik eigenlijk liever hebben dat hij zegt van:
Voorwerp : aantal
EZEZEZ - 8
lol - 4
Huls 1 - 3

Iemand 'n idee hoe ik dit fix ?

Cycloon

Legacy Member
Een group by en count(1) in uw query plaatsen. Heeft niks met php te maken maar met SQL :)

passero

Legacy Member
select artikelNaam, count(1) aantal from uwTabel group by artikelNaam;

Zo ongeveer :D

exxhal

Legacy Member
SELECT count(id) from tabel WHERE product = EZEZEZ and gebruiker = naam

passero

Legacy Member
euhm ja, gaat ge dan per product een query uitvoeren? De group by zal toch wel ferm performanter zijn ze.

exxhal

Legacy Member
SELECT count(product1),count(product2),count(product3) FROM tabel where gebruiker = gebruikersnaam

passero

Legacy Member
als ge da zo wilt gebruiken is uw DB model fucekd up:

tabel (product1,product2,product3,gebruiker)

Als er dan een nieuw product moet bijkomen moet ge
1) uw tabel aanpassen
2) heel uw code overlopen en da daar ook aanpassen...

Normalisatie FTW

exxhal

Legacy Member
Ah ja ok , er is een veld met aantal, daar was ik even niet mee.

Cycloon

Legacy Member
Haha die count gaat trouwens gewoon het aantal rijen geven waarvoor gebruiker = gebruikersnaam en dus voor alle 3 de counts hetzelfde getal geven onafhankelijk van product.

En nee, zelf als er een veld is voor aantal lijkt je query nog op niks. Ik zou maar eens je SQL kennis opfrissen.

exxhal

Legacy Member
Cycloon zei:
Haha die count gaat trouwens gewoon het aantal rijen geven waarvoor gebruiker = gebruikersnaam en dus voor alle 3 de counts hetzelfde getal geven onafhankelijk van product.

En nee, zelf als er een veld is voor aantal lijkt je query nog op niks. Ik zou maar eens je SQL kennis opfrissen.

AH ja goed gezien. Maar zonder aantal is het moeilijk een group by te doen denk ik.
Ik was meer opzoek naar een Q zonder de tabel aantal.

passero

Legacy Member
niemand gebruikt hier een tabel aantal :s
denk da ge beetje in de war zijt ze :p

Deadangel

Legacy Member
Ik heb nu:

$dbres = mysql_query("SELECT Leerling, Datum, Aantal, Uitgeleend_ID, Code, COUNT(Code) AS Aantal FROM uitgeleend GROUP BY Code");

Maar 'k heb het volgende probleem; ze mogen enkel gegroepeerd worden als de Leerling hetzelfde is..

WHiSPy

Legacy Member
Ik kan mij vergissen, maar staat er in de SQL spec niet dat je bij 'n group by al je velden uit de select moet opgeven?

woony

Legacy Member
Deadangel zei:
Ik heb nu:

$dbres = mysql_query("SELECT Leerling, Datum, Aantal, Uitgeleend_ID, Code, COUNT(Code) AS Aantal FROM uitgeleend GROUP BY Code");

Maar 'k heb het volgende probleem; ze mogen enkel gegroepeerd worden als de Leerling hetzelfde is..

group by leerling dan?

en moet je niet sum gebruiken dan inplaats van count, wat zit er anders in da aantal veld? telkens 1 ofwa?

Stel uw vraag eens duidelijk, voorbeeld tabelletje en wat uw correcte uitkomst moet zijn en dan geefk u direct de oplossing :)

passero

Legacy Member
hij neemt count(code) dus als die code B0005 ofzo is kunt ge al geen sum doen :p
Een sum neemt de som van de waarde van het veld. Een count telt gewoon het aantal records.

$dbres = mysql_query("SELECT Leerling, Aantal, code, COUNT(aantal) AS totaal FROM uitgeleend GROUP BY Leerling,code");

Volgens mij hebde nie echt die query geprobeerd want die zou enkele fouten moeten geven:
1) ge hebt al een veld Aantal en dan neemt ge als alias van count(code) aantal. Da zou al nie mogen.
2) count(code) en group by code in dezelfde query zou ook een fout moeten geven. Ge moet groeperen op velden waar ge geen bewerkingen op doet
3) in een group by moeten alle velden opgenomen worden of ge krijgt problemen.

De velden die ge opneemt in uwe query zijn ook nie juist.
ge hebt leerling,uitgeleend,datum. VOlgens mij zijn uitgeleend en datum overbodig want als ge groepeert moet ge die velden opnemen en dan krijgt ge eigenlijk een groepering op de combo leerling+uitgeleend+datum. Wat wil zeggen dat als Leerling A op dag 1 iets uitleend en dan op dag 2 iets anders ge eigenlijk 2 records ga hebben ipv 1.
Daarom da ge dus enkel Leerling,count(aantal) as totaal moet gebruiken.

De query die ik gegeven heb zou een overzicht moeten geven per leerling, per code hoeveel hij der heeft uitgeleend.

Maar het zou idd beter zijn als ge eens het datamodel kunt posten en wat meer data want zo wordt het moeilijk :)

Oh ja... probeer toch zelf eens wat te prutsen ipv ons alles te laten doen :p

Cycloon

Legacy Member
passero zei:
3) in een group by moeten alle velden opgenomen worden of ge krijgt problemen.

Nah MYSQL is daar laks in, als ge enkel de kolom vertelt waar ge wilt op groepen is die al tevreden.

Anyway, je moet GROUP BY leerling, code doen volgens mij :) (zoals passero blijkbaar ook zei :p)

Als je een aantal veld hebt gebruik je best SUM(aantal) anders als iemand bv 2 dingen gaat geleend hebben zal die maar 1 keer geteld worden.

exxhal

Legacy Member
SELECT code,sum(aantal) FROM `uitgeleend` where Leerling = naam group by code

Dan zou hij toch mooi het aantal geven van iedere code welke je dan zelf in php kan omzetten in een duidelijke benoeming.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan