[MySQL] Veld uitsluiten in een query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kvdd

kvdd

14/02/2008 17:34:00
Quote Anchor link
Schets:
Een gebruiker kan dmv een formuliertje een incident melden, die een medewerker weer kan zien. De volgende zaken worden opgeslagen in de database (er zijn er meer, maar de niet ter zake doende laat ik achterwege) het incident id, namelijk:
- inci_id (incremental)
- het inci_nr (dit nummer blijft hetzelfde, bij bijvoorbeeld een antwoord van een medewerker op het incident)
- status (deze kan zijn afgehandeld, in_behandeling, onbehandeld

Probleemsituatie:
Gebruiker maakt incident aan met de volgende kenmerken
schrijft naar database:
inci_id = 1
inci_nr = 1000
status = onbehandeld

De medewerkerd ziet het incident, opent het, en zet het incident op in_behandeling
schrijft naar database, nogmaals voegt velden toe:
inci_id = 2
inci_nr = 1000
status = in_behandeling

Nu wordt er aan het incident gewerkt, en als het opgelost is zet de medewerker het op afgehandeld nu komt het..
schrijft naar database, nogmaals voegt velden toe:
inci_id = 3
inci_nr = 1000
status = afgehandeld

Nu gaat de medewerker naar het incidentenoverzicht en tot zijn verbazing komt het incident nog steeds voor (afgehandelde berichten mogen niet meer voorkomen), en waarom? Omdat van inci_nr 1000 twee incidenten niet de status afgehandeld hebben, en dus weergegeven mogen worden.
Het probleem is nu, de gebruiker mag in zijn account, zijn eigen gemelde incidenten zien, en daarom doe ik geen update, maar elke keer weer een nieuw veld met een zelfde inci_nr die ik daaraan koppel.

Hoe schrijf ik nu die query die dus eigelijk moet checken: "als inci_nr 1000 ergens op afgehandeld staat, niet weergeven bij het medewerker-incidentenoverzicht.

Momenteel is mijn query dit: [deze is dus fout ;)]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$q_inci
= mysql_query("SELECT * FROM help_inci WHERE status='In_behandeling' OR status='Onbehandeld' GROUP BY inci_nr ORDER BY inci_id,inci_nr ASC");
?>


Alvast hartelijk bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Kvdd
 
PHP hulp

PHP hulp

21/05/2024 15:28:36
 
Joren de Wit

Joren de Wit

14/02/2008 17:38:00
Quote Anchor link
De opzet van je datamodel is verkeerd. Je gaat natuurlijk niet voor elke reactie die een werknemer geeft een nieuw incident aanmaken, dit zijn immers geen incidenten maar reacties. Je zult dus met een aparte tabel 'reacties' moeten werken die er bijvoorbeeld als volgt uit ziet:

reacties
----------
id
inci_id
reactie
tijdstip

Als een werknemer nu een reactie toevoegt, maak je een nieuw record in deze tabel aan waarin je de reactie aan een bepaald incident koppelt.

ps. De status sla je natuurlijk wel gewoon op in de incidenten tabel, maar aangezien er per incident nu nog maar 1 record voorkomt, zou dit geen problemen op moeten leveren.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Frank -

Frank -

14/02/2008 17:40:00
Quote Anchor link
Door in de juiste tabel de status op 'afgehandeld' te zetten.

Ik heb m'n twijfels over jouw datamodel. Je heb al minimaal 5 tabellen nodig om dit te registreren:
users, user_incident, incident, status, incident_content
 
Joren de Wit

Joren de Wit

14/02/2008 17:46:00
Quote Anchor link
@Frank: ik vraag me af waarom je de (koppel?)-tabel user_incident nodig zou hebben? Zoals ik het zie hoort er bij een incident maar 1 gebruiker dus deze informatie zou dan toch prima in de incidenten tabel opgeslagen kunnen worden?
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
PHP Newbie

PHP Newbie

14/02/2008 17:48:00
Quote Anchor link
incidenten:
id | incident_id | status

reacties:
id | incident_id | reactie | van | datum

De status van een incident is een eigenschap van het incident. De reacties zijn alleen maar een onderdeel van een incident en horen dus in een aparte tabel.

Edit:

Toch maar even refreshen voordat ik post
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Frank -

Frank -

14/02/2008 17:49:00
Quote Anchor link
Omdat er meerdere users aan 1 incident kunnen werken. Wellicht niet gelijktijdig, maar het is zeker mogelijk
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Kvdd

kvdd

14/02/2008 18:17:00
Quote Anchor link
Allemaal hartelijk dank,

@Blanche: je hebt volkomen gelijk, dat ik dat niet gezien heb :-/ maar al doende leert men. Het achterliggende probleem is dat ik niet genormaliseerd heb voordat ik begon, heb nu dus alle redenen omdat in het begin wel te doen.

@PHP Newbie: toch ook bedankt :)

@pgFrank: ik heb ook mijn nodige twijfels, aangevult met wat Blanche heeft gezegd. Houd er rekening mee, en ik heb het al gezegd, dat ik lang niet alle velden van mijn tabel genoemd heb.

In ieder geval, dit heeft mijn probleem opgelost! Ik ga een reactie_tabel aanmaken :)

Edit:

Nog 1 vraag, in het reactie tabel zoals Blanche voorstelde, zijn er dus twee primary keys?
- id
- inci_id
Gewijzigd op 01/01/1970 01:00:00 door kvdd
 
Frank -

Frank -

14/02/2008 18:20:00
Quote Anchor link
Niet normaliseren... Tja, dan krijg je dit. Tevens krijg je er een hoop extra werk bij. Werk nu eerst even het datamodel goed uit, dat scheelt je straks een hele hoop werk.
 
Joren de Wit

Joren de Wit

14/02/2008 18:37:00
Quote Anchor link
Quote:
zijn er dus twee primary keys?
Nee in 1 tabel kunnen nooit meerdere primary keys zitten. De inci_id in die tabel is een foreign key die verwijst naar de incidenten tabel...
 



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.