[MySQL] Veld uitsluiten in een query
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)
1
2
3
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");
?>
$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
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
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
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
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
Toch maar even refreshen voordat ik post
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Gewijzigd op 01/01/1970 01:00:00 door Frank -
@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
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
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.
Quote:
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...zijn er dus twee primary keys?