hulp bij een query
Ik heb een database waarin gebruikers zitten verbonden aan groepen en ook berichten die verbonden zijn aan groepen.
De volgende query werkt perfect met de groepen die gekoppeld zijn .
Maar nu wil ik vanuit de gebruiker ook een indienstdatum meegeven.
Nu zou de query hetzelfde moeten doen maar enkel de berichten na de indienstdatum weergeven die toegekend zijn door de groepen.
Hier een stukje code waarin de query zit :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$sleutel = $_SESSION["UserID"] ;
//********** Check if specific record exists ************
global $conn;
$strSQLExists = "select * from gebruikers where PersUserID='$sleutel'";
$rsExists = db_query($strSQLExists,$conn);
$data=db_fetch_array($rsExists);
if($data)
{
if($sleutel <> "IBOXPW")
{
$gb_ID = $data['ID'];
$gb_dat = $data['indienstdat'];//moet nog verwerkt worden in de query
$strSQL = "SELECT
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
LEFT JOIN gelezen ON gelezen.news_id = newsmain.ID AND user_id = '$sleutel'
WHERE gelezen.news_id is null ";
}
//WHERE ID NOT IN (SELECT news_id FROM gelezen WHERE user_id = '$sleutel')
}
else
{
// if dont exist do something else
}
?>
$sleutel = $_SESSION["UserID"] ;
//********** Check if specific record exists ************
global $conn;
$strSQLExists = "select * from gebruikers where PersUserID='$sleutel'";
$rsExists = db_query($strSQLExists,$conn);
$data=db_fetch_array($rsExists);
if($data)
{
if($sleutel <> "IBOXPW")
{
$gb_ID = $data['ID'];
$gb_dat = $data['indienstdat'];//moet nog verwerkt worden in de query
$strSQL = "SELECT
newsmain.ID,
newsmain.InforefDoc,
newsmain.InfoDat,
newsmain.InfoTitel,
newsmain.InfoDatBegin,
newsmain.InfoDatEind,
newsmain.Infolocatie
FROM newsmain
INNER JOIN news_cat ON newsmain.ID = news_cat.ID_news
INNER JOIN gebr_cat ON news_cat.ID_category = gebr_cat.ID_Category and ID_gebruiker ='$gb_ID'
LEFT JOIN gelezen ON gelezen.news_id = newsmain.ID AND user_id = '$sleutel'
WHERE gelezen.news_id is null ";
}
//WHERE ID NOT IN (SELECT news_id FROM gelezen WHERE user_id = '$sleutel')
}
else
{
// if dont exist do something else
}
?>
WIE KAN HELPEN AUB.
Dank bij voorbaat
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 06/02/2019 21:37:17 door - Ariën -
AND newsmain.InfoDat (of welke kolom van toepassing is) >= <datum indiensttreding>
?
Hoe luidt het datumformaat? Hopelijk yyyy-mm-dd? Anders kun je hier niet mee rekenen.
Waarom zouden medewerkers trouwens geen eerdere berichten mogen lezen?
Ik vermoed dat een andere aanpak dan de huidige beter is. Bijvoorbeeld op basis van rechtenbeheer/subnieuwsgroep/uitnodiging in een nieuwsgroep iemand toegang geven/uitsluiten van berichten. Maar niet op grond van datum van indiensttreding.
Het gaat hier om technische berichten en nieuwe mensen die in dienst komen moeten de vervallen berichten niet af punten, zij moeten enkel de huidige berichten af punten, maar de oude blijven enkel zitten om er toch nog info uit te halen als het moet.
Ik ben geen held in query, dus weet niet goed waar in de query ik dit moet plaatsen, ik heb uw and al op verschillende plaatsen gezet maar ik kom tot geen resultaat.
De query zoals hierboven werkt perfect, maar de nieuwe gebruikers zien dan ook de oude berichten en dit is overbodig, want het kunnen er honderden zijn als dit programma enkele jaren dienst doet.
Indien je mij zou kunnen zeggen waar ik het juist moet plaatsen kan ik een test doen.
alvast bedankt
Zoals Thomas al aanhaalde. Hoe heb je het datum formaat opgeslagen in je DB?
Het is na je WHERE dat je de AND moet toevoegen
AND (newsmain.InfoDatBegin > gebruikers.indienst) ;