Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Controleren op existence veld en actie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Eerst en vooral, ik werk met PHP en MySQL.

De database is als volgt opgezet:
ID
nickname
week
month
year
date
time
type

Het gaat hier over uren die geregistreerd worden.
Wat ik momenteel doe is een mysql_query op de tabel om per dag (uit het veld date) het type te gaan halen en op basis van het type, bepaalde tekst weer te geven.
Dat lukt allemaal.
Wat ik nu ook zou willen is dat wanneer ik bv voor datum 2008-04-29 geen rij heb in de tabel, hij me een lijn tekst weergeeft.

Hoe kan ik dit doen ?

De code momenteel om te gaan checken is als volgt:

$query = mysql_query("SELECT * FROM timetrack where nickname='$nickname' AND month='04' AND year='2008' ORDER BY date");
while($row = mysql_fetch_assoc($query))
{
if($row['date'] == '2008-04-01')
{
echo 'tekst';
}
...
voor alle dagen dus

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Je wilt voor alle dagen van een maand controleren of er een record is, en zoniet iets weergeven...
Ik denk dat je dan op een andere manier moet gaan werken. Niet je MySQL query gebruiken om mee te loopen maar een loop maken over het aantal dagen per maand en in elke occurence van die loop controleren of er een record bestaat met die dag.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
De oplossing die Barthezz aandraagt zou kunnen, maar het probleem is dat je dan voor elke dag een query afvuurt op de database, wat qua performance niet ideaal is.

Wat je zou kunnen doen is iets als het volgende (bear with me, ik ben geen php-programmeur, dus de syntax kan een beetje krom zijn)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query = mysql_query("SELECT * FROM timetrack where nickname='$nickname' AND month='04' AND year='2008' ORDER BY date");
$prev_date = '2008-04-01';
while($row = mysql_fetch_assoc($query))
{
  //Loop over alle ontbrekende datums heen
  for($current_date = $prev_date; $current_date < $row['date']; day_add($current_date, 1))
  {
    echo 'Geen info beschikbaar voor ' + $current_date;
  }

  //Hier hebben we wel informatie voor
  echo 'Info voor ' + $row['date'];

  //Ga verder met de dag volgend op de huidige
  $prev_date = day_add($row['date'], 1)
}

//Ontbreekt nog: loop door alle datums vanaf de laatste rij uit je query totaan het einde van de maand.

[ Voor 5% gewijzigd door MrBucket op 26-04-2008 12:17 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Allereerst moet je afleren om * te selecten in applicaties, maar alleen de velden die je echt nodig hebt. Vervolgens moet je op runtime bepalen hoeveel dagen er in je huidige maand zitten en bij het loopen over je result records een tellertje in tandem mee laten lopen. Als je tellertje een bepaalde datum wel aangeeft die je niet op de goede volgorde in je resultset aantreft heb je een ongevulde dag. Alternatief kun je ook een associative array bouwen uit je resultset met resultaten geindexeerd op dag dan wijst zichzelf nog eenvoudiger waar alle gaten liggen.

Ik hoop overigens dat dit een huiswerkopdracht is en niet voor een bedrijf gezien het niveau van je vragen, iets zegt me dat jij heel veel baat hebt bij een paar online tutorials en het doorlezen van wat goede boeken. Zelf leren werkt ook sneller dan overal je vragen neerplempen en wachten tot iemand anders het voor je oplost.

[ Voor 12% gewijzigd door curry684 op 26-04-2008 12:16 ]

Professionele website nodig?