MYSQL verwijzing (Prim en For key)

Status
Niet open voor verdere reacties.
Het lijkt erop dat je het SHOW en CALL commando door elkaar haalt. Met CALL roep je de procedure aan. Je krijgt dan (als het goed gaat) als antwoord "Query OK" of een foutmelding wanneer de procedure niet goed is.

Bij SHOW krijg je het CREATE-statement te zien of NULL wanneer je geen rechten hebt om het SHOW commando uit te voeren. Maar je krijgt wel altijd antwoord bij SHOW.

Mocht je iets anders krijgen kopieer dan even het commando dat je geeft met het antwoord dat je van mysql krijgt. Dat maakt het wat makkelijker om te bekijken wat er fout gaat.
 
@Epic, ik heb dit even overgeslagen, hier komen we nog wel even op terug.

Nu heb ik een andere vraag:

Van de tabel album die ik heb moet ik de aantal keren dat de genres (per genre voorkomt) met de COUNT(genre) maken.

Als ik die gebruik, dan telt het alle genres op.. en dat is niet de bedoeling. De bedoeling is per genre optellen hoeveel dat er zijn (dat kan er 1,2 of 3 zijn).

SELECT albumtitel, artiest, genre, COUNT(genre) FROM album; is wat ik doe, maar het moet wss anders zijn zodat ik per genre kan optellen.

En andere opdracht is het weergeven van de MIN prijs per genre..
SELECT albumtitel, artiest, genre, MIN(prijs) FROM album;

Dank je Epic!
 
Je moet een GROUP BY doen op het genre als je wilt tellen hoe vaak elke waarde voorkomt.

SELECT albumtitel, artiest, genre, COUNT(genre) FROM album GROUP BY genre

GROUP BY zorgt dat alle rijen waarbij de inhoud van het veld in kwestie hetzelfde is gebruikt worden voor het bepalen van dingen als COUNT, SUM, AVERAGE, en andere functies die als antwoord meerdere rijen bij elkaar moeten voegen.
 
@Epic kleine updatje betreft de SHOW procedure. Ik ben opnieuw de administratie db ingegaan en heb het gewoon uitgevoerd en het was te zien.. en klik ik er weer opnieuw, geeft het niet aan. Enige wat het aangeeft is een link genaamd optie en als ik die open klap word ik er ook niet wijzer van.

Maar goed, nu werkt het tenminste als ik telkens het venstertje moet openen :P
 
@Frats, hey jij bent er ook nog :P

Aha, de GROUB BY. Helemaal vergeten. Gelukt en deze ook:

SELECT albumtitel, artiest, genre, MIN(prijs) FROM album GROUP BY genre;

Dank je!


Het volgende werkt niet. Ik heb een procedure gemaakt (deze):

DROP PROCEDURE `proc_checkparams`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_checkparams`(
INOUT param1 VARCHAR(5),
INOUT param2 INT,
OUT melding VARCHAR(50))
BEGIN
IF param1 = '' OR param2 = '' THEN
SET melding = 'Foutmelding: er zijn een of meer input errors';
ELSE
SET melding = 'Er zijn geen input errors';
END IF;
END

en met

SET @param1 = '';
SET @param2 = 0;
SET @melding = '';
CALL proc_checkparams(@param1, @param2, @melding);

Zou er het volgende melding moeten weergeven:
Foutmelding: er zijn een of meer input errors..

Enige wat het aangeeft is dat de query succesvol is uitgevoerd :P
 
Het antwoord dat je verwacht is het antwoord van de stored procedure. Alleen wordt deze niet als output in het scherm getoond maar opgeslagen in de variabele @melding. SELECT @melding; geeft waarschijnlijk wel de melding die je verwacht. De melding dat de query succesvol is is van mysql zelf en geeft alleen aan dat er geen fouten tijdens uitvoeren van de procedure zijn opgetreden. Dit zegt niets over de in- of output parameters van de procedure.
 
@Epic, oke, maar hoe zou ik dat anders wel moeten doen? Vage boek dan. Er staat duidelijk in nadat je het overtypt dat je dan die melding zou moeten krijgen..
 
Procedures geven nooit output naar het scherm (tenminste niet in mysql, in sommige andere database programma's kan dat wel). Enige manier is om na het aanroepen van de procedure via een select de variabele te tonen:

[sql]SET @param1 = '';
SET @param2 = 0;
SET @melding = '';
CALL proc_checkparams(@param1, @param2, @melding);
SELECT @melding;[/sql]
 
@Epic,

ik krijg dan gewoon deze error:

#1054 - Unknown column '‘’' in 'field list'


En als ik deze procedure maak

CREATE PROCEDURE proc_setvoorraad(IN code INT)
BEGIN
CASE code
WHEN 0 THEN UPDATE boeken SET `´voorraad´`= 0;
WHEN 1 THEN UPDATE boeken SET `´voorraad´`= 100;
WHEN 2 THEN UPDATE boeken SET `´voorraad´`= 200;
ELSE UPDATE boeken SET `´voorraad´`= 300;
END case;
END;
//

en vervolgens aanroep met deze code

SET @code = 3;
call proc_setvoorraad(@code);
SELECT @code;

Dan krijg ik alleen de 3 te zien.. :(
 
Beste Epic, dank dat je me steunt (en Frats en de rest).
Ik ben nu achtergekomen wat de hele procedure gedoe inhoudt. In principe wanneer je de procedure aanvraagt, wordt het gewijzigs en klopt. Gewoon select gebruiken om het weer te zien. Deze is me gelukt:

SET @code = 3;
call proc_setvoorraad(@code);

Nu blijft de @melding nog. Ik zal daar nog even mee sleutelen en laat het jullie weten :P
 
UPDATE: Epic, weer gelukt :p

Nu ik de naam van de velden heb gewijzigd gaat het veel beter, maar ik laat je nog van me horen hoor :d
 
@Epic, kun je me helpen met het volgende:

Ik moet een functie maken die het aantal titels geeft met een prijs onder de opgegeven limiet, zo dus:

CREATE FUNCTION func_prijsonder(limiet FLOAT)

Mijn boeken tabel bestaat uit de volgende velden:

code, titel, auteur, prijs, voorraad..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan