Selecteren datums in rij
voorbeeldje ingekorte table:
+----+--------------+
| id | datum --- |
+----+--------------+
| 1 | 2015-02-05 --|
| 2 | 2015-02-10-- |
| 3 | 2015-02-10 --|
| 4 | 2015-02-12 --|
+----+--------------+
Dit geeft in een rij:
2015-02-05
----------------
2015-02-10
-----------------
2015-02-10
--------------------
2015-02-12
--------------------
Is het mogelijk het op deze manier te verkrijgen, zodat alles met datum 2015-02-10 in een rij komt?
2015-02-05
----------------
2015-02-10
2015-02-10
--------------------
2015-02-12
--------------------
Gewijzigd op 30/03/2015 15:20:52 door Pierre Web
Dit kun je doen door bij te houden wat de datum van het huidige record is. Indien de volgende datum verschilt, start je eerst een nieuwe rij en sla je deze nieuwe datum op.
PHP Mysqli
Heb je een voorbeeldje ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Zodoende zou ik tot de volgende code komen (verder niet getest):
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// ...
}
// print laatste scheiding hier
// ...
?>
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// ...
}
// print laatste scheiding hier
// ...
?>
Zoals in mij eerste post te zien is gaat het eigenlijk om een soort kalender,
ik wil de data uit table die op dezelfde dag zijn in een rij hebben
Uitgebreider voorbeeldje
+----+------------+----------+
| id | datum |aktiviteit|
+----+------------+----------+
| 1 | 2015-02-05 |werk |
| 2 | 2015-02-10 |vakantie |
| 3 | 2015-02-10 |markt |
| 4 | 2015-02-12 |test |
+----+------------+----------+
Dit geeft in een rij: (2015-02-10 2x apart, dus niet gewenst)
--------------------
2015-02-05
werk
--------------------
2015-02-10
vakantie
--------------------
2015-02-10
markt
------------------
2015-02-12
test
--------------------
wat ik zou willen
--------------------
2015-02-05
werk
--------------------
2015-02-10
vakantie
markt
--------------------
2015-02-12
test
--------------------
Ik heb volgende
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$result= $mysqli->query("SELECT *
FROM `gelijke_datums`
order by datum");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}?>
<?php while ($row = $result->fetch_array())
{
$id = stripslashes($row['id']);
$datum = stripslashes($row['datum']);
$activiteit = ($row['activiteit']);
?>
<p> <span><?php echo $datum ?></span> <a href="#<?php echo $id ?>" >
<?php echo $activiteit ?></a> </p>
<hr>
<?php } ?>
$result= $mysqli->query("SELECT *
FROM `gelijke_datums`
order by datum");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}?>
<?php while ($row = $result->fetch_array())
{
$id = stripslashes($row['id']);
$datum = stripslashes($row['datum']);
$activiteit = ($row['activiteit']);
?>
<p> <span><?php echo $datum ?></span> <a href="#<?php echo $id ?>" >
<?php echo $activiteit ?></a> </p>
<hr>
<?php } ?>
Gewijzigd op 30/03/2015 20:16:30 door Pierre Web
Door tijdgebrek ff moeten laten liggen
Dit was voor mijn geval de oplossing
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// ...
}
// print laatste scheiding hier
// ...
?>
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// ...
}
// print laatste scheiding hier
// ...
?>
Ik krijg nu dezelfde datums en bijbehorende in EEN rij
----------------------
vrijdag 3 april
tekst A
vrijdag 3 april
tekst B
----------------------
enz
Is er een nog een mogelijkheid om EEN datum in een rij te printen of te laten zien :
----------------------
vrijdag 3 april
tekst A
tekst B
----------------------
Moet je dat wel op de goede plaats doen natuurlijk...
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// *** PRINT HIER JE DATUM ***
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// *** PRINT HIER DE REST ***
}
// print laatste scheiding hier
// ...
?>
$showDivider = false;
$currentDate = '';
while ($row = mysqli_fetch_assoc($result)) {
if ($currentDate != $row['datum']) {
// update huidige datum
$currentDate = $row['datum'];
// *** PRINT HIER JE DATUM ***
// toon scheiding?
if ($showDivider) {
// print scheiding hier
// ...
} else {
// skip eerste scheiding
$showDivider = true;
}
}
// en wat je nog meer met $row wilt doen
// *** PRINT HIER DE REST ***
}
// print laatste scheiding hier
// ...
?>
@door de datum te printen op het moment dat de datum verander
Zie het bovenstaande codefragment en de toevoegingen *** TUSSEN STERRETJES ***.
ik zal de volgorde hoe ik het heb eens nalopen.
Toevoeging op 25/04/2015 16:52:22:
Ik heb de scheiding hier gezet:(hr) en dat werkt nu goed.
bedankt voor je hulp Thomas!
Gewijzigd op 25/04/2015 16:53:21 door Pierre Web
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
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
<?php
// stel $vorige_datum in
$vorige_datum = false;
while ($row = $result -> fetch_array())
{
$id = stripslashes($row['id']);
$datum = stripslashes($row['datum']);
$activiteit = $row['activiteit'];
// datum en lijnen etc alleen tonen als het nodig is
if ($vorige_datum != $datum)
{
// bij alle niet-eerste-rij de vorige <p> ook afsluiten
if ($vorige_datum == false)
{
echo '</p>';
}
// paragraaf starten
echo ' <p>';
// een kopje plaatsen, want zo gebruik je het tenslotte
echo ' <h4>' . $datum . '</h4>';
}
// elke activiteit printen, want hier gaat het om
echo '<a href="#' . $id . '" >' . $activiteit . '</a>';
// overschrijf datum
$vorige_datum = $datum;
}
// laatste ook afsluiten uiteraard
echo '</p><hr>';
?>
// stel $vorige_datum in
$vorige_datum = false;
while ($row = $result -> fetch_array())
{
$id = stripslashes($row['id']);
$datum = stripslashes($row['datum']);
$activiteit = $row['activiteit'];
// datum en lijnen etc alleen tonen als het nodig is
if ($vorige_datum != $datum)
{
// bij alle niet-eerste-rij de vorige <p> ook afsluiten
if ($vorige_datum == false)
{
echo '</p>';
}
// paragraaf starten
echo ' <p>';
// een kopje plaatsen, want zo gebruik je het tenslotte
echo ' <h4>' . $datum . '</h4>';
}
// elke activiteit printen, want hier gaat het om
echo '<a href="#' . $id . '" >' . $activiteit . '</a>';
// overschrijf datum
$vorige_datum = $datum;
}
// laatste ook afsluiten uiteraard
echo '</p><hr>';
?>
Daarnaast lijkt met een <hr> niet nodig: zet gewoon een lijn op je <p> met CSS.
Al is het nog niet goed met de P elementen, die heb ik er ff uitgelaten , want de uitvoer was:
</p> <p>
<h4>01-04-2015</h4><a href="#2076" >tekst 1</a>
<p><h4>02-04-2015</h4><a href="#2077" >tekst 2</a>
enz.
Wellicht goed om te zeggen dat ik de datum als tekst uiteindelijk in een div wil, al kan ik ook een ander element van een border enz. voorzien