[PHP + MySQL] Datum in tekst

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Parmenides
  • Registratie: Juni 2003
  • Laatst online: 02-08 13:41
Hallo,

'k ben momenteel in de weer met een lijst gamereleases. In de database staan diverse velden, waaronder 'datum' en 'datum_tekst'. Dat laatste veld is nodig voor games die nog geen concrete, maar wel een vage datum hebben. Als game X bijvoorbeeld een release heeft in januari 2006, dan vul ik 2006-01-31 in (in het eerste veld) en januari 2006 (in het tweede veld).

Nu wil ik de lijst sorteren op het veld 'datum', maar de inhoud van 'datum_tekst' (in plaats van 'datum') weergeven als dit veld tekst bevat. Hoe doe ik dat? Dit script heb ik al:
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
<table>

<?php
include 'connect.php';

$result = mysql_query("
SELECT date_format(Datum,'%d-%m-%Y') as datum, datum_tekst, regio, console, titel
FROM games 
WHERE MONTH(datum) = (MONTH(NOW()))
ORDER BY datum ASC, regio ASC, console ASC
") 
or die(mysql_error()); 

while($row = mysql_fetch_array( $result )) {

echo "<tr onmouseover=\"this.bgColor='#E1E6F0';\" onmouseout=\"this.bgColor=''\" /><td width='12'></td><td class='td1'>"; 
echo $row['datum_tekst'];
echo "</td><td class='td2'><img src=\""; 
echo $row['regio'];
echo ".gif\" /></td><td class='td3'>"; 
echo $row['console'];
echo "</td><td class='td4'><a href='#'>"; 
echo $row['titel'];
echo "</a></td><td width='12'></td></tr>";
} 
?>

</table>

Dank alvast!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
$datum = empty($row['datum_tekst']) ? $row['datum'] : $row['datum_tekst'];

:?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Parmenides
  • Registratie: Juni 2003
  • Laatst online: 02-08 13:41
Perfect. Ben nog niet zolang bezig met php, maar dat had je gezien de vraag al begrepen, denk ik. :)
Dankjewel!

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Bovenstaand is een verkorte versie van het if-statement. Als je hem zo ziet zie je misschien opeens t licht en vraag je je af waarom je er zelf niet op was gekomen;
PHP:
1
2
3
4
if(empty($row['datum_tekst']))
  $datum = $row['datum'];
else
  $datum = $row['datum_tekst'];


Je zou het ook al in je query kunnen afvangen, maar dan ga je onnodig moeilijk doen. De oplossing van NME is denk ik het mooist.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
frickY schreef op zaterdag 14 januari 2006 @ 22:44:
Je zou het ook al in je query kunnen afvangen, maar dan ga je onnodig moeilijk doen. De oplossing van NME is denk ik het mooist.
Dat valt toch wel mee, als het datum veld netjes NULL is bij geen gegevens dan kun je gewoon COALESCE gebruiken, makkelijker kan bijna niet :)
SQL:
1
2
3
SELECT COALESCE(`datum`, `datum_text`) AS `display_date` 
FROM `table` 
ORDER BY `datum`

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt het eventueel ook met een IF-statement binnen je query opvangen:

SQL:
1
2
3
SELECT
IF(`datum_text`, `datum_text`, `datum`) AS `display_date`  
FROM `table`  

[ Voor 10% gewijzigd door Verwijderd op 15-01-2006 16:11 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Is een beetje afhankelijk van de gebruikte MySQL-versie of bovenstaande voorbeelden werken.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Verwijderd schreef op zondag 15 januari 2006 @ 16:10:
Je kunt het eventueel ook met een IF-statement binnen je query opvangen:

SQL:
1
2
3
SELECT
IF(`datum_text`, `datum_text`, `datum`) AS `display_date`  
FROM `table`  
In plaats van IF kun je ook gewoon de standaard volgen:

SQL:
1
2
3
SELECT
(CASE WHEN datum_text THEN datum_text ELSE datum END CASE) AS `display_date`  
FROM `table`  
Pagina: 1