abonnement Unibet Coolblue Bitvavo
pi_48889954
timestamp
  dinsdag 1 mei 2007 @ 16:50:34 #152
18008 hornage
FOK! Movie Trivia-Prijsmeester
pi_48894054
datetime dus
Test je filmkennis! Speel mee met FOK! Movie Trivia en win prijzen!
pi_48894760
quote:
Op dinsdag 1 mei 2007 16:50 schreef hornage het volgende:
datetime dus
Waarom niet timestamp? Met datetime moet je eerst alles door strtotime() halen voor je date() kan gebruiken?
pi_48895027
Zodat je in je queries kan rekenen.


Al kan ik je aanraden om met timestamps te werken als je toch alles door PHP trekt
pi_48902722
quote:
Op dinsdag 1 mei 2007 17:19 schreef Geqxon het volgende:
Zodat je in je queries kan rekenen.
Kan toch ook gewoon met timestamp?
..///
pi_48912704
quote:
Op dinsdag 1 mei 2007 21:02 schreef wipes66 het volgende:

[..]

Kan toch ook gewoon met timestamp?
Volgens mij kun je dan direct in de query al op eigenschappen filteren als "gisteren" of "over een jaar"
pi_48912891
quote:
Op woensdag 2 mei 2007 00:36 schreef Geqxon het volgende:

[..]

Volgens mij kun je dan direct in de query al op eigenschappen filteren als "gisteren" of "over een jaar"
Dat is zeer zeker waar. Echter zijn dat ook dingen die je vantevoren in PHP kunt doen. Een timestamp neemt als unsigned int maar 4 bytes in beslag, terwijl een datetime 8 bytes in beslag neemt. Een index op een unsigned int is daardoor ook nog eens kleiner (en waarschijnlijk sneller). Verder kun je je afvragen of je de presentatie al op databaseniveau wilt doen, of juist in de presentatielaag ik zie persoonlijk een RDMBS als een opslagplatform waarbij de datatypen het liefst zo simpel en klein mogelijk zijn.
pi_48916218
Ik geef de voorkeur ook aan (UNIX) timestamps. Vind ik veel fijner en als er een berekening aan een dergelijke timestamp vooraf gaat, dan kan ik die fijn tot op de seconde helemaal zelf doen.

Als ik op m'n werk weer met ASP.NET werk dan werk ik weer met 'normale' timestamps, is vrijwel standaard van ons Microsoftje.
pi_48916833
quote:
Op woensdag 2 mei 2007 00:44 schreef JeRa het volgende:

[..]

Dat is zeer zeker waar. Echter zijn dat ook dingen die je vantevoren in PHP kunt doen. Een timestamp neemt als unsigned int maar 4 bytes in beslag, terwijl een datetime 8 bytes in beslag neemt. Een index op een unsigned int is daardoor ook nog eens kleiner (en waarschijnlijk sneller). Verder kun je je afvragen of je de presentatie al op databaseniveau wilt doen, of juist in de presentatielaag ik zie persoonlijk een RDMBS als een opslagplatform waarbij de datatypen het liefst zo simpel en klein mogelijk zijn.
Precies, als je dan toch met PHP werkt kan het inderdaad vaak makkelijker om met timestamps te werken. Strtotime is een mooie functie waar je simpelweg "-1 day" als string in kan voeren.

Ik vraag mij daardoor ook af wie er MySQL in combinatie met iets anders gebruikt dan bijvoorbeeld PHP of Java / C.
  woensdag 2 mei 2007 @ 11:55:48 #160
51748 H4ze
wait...what?
pi_48921641
Oi ff een vraagje,

ik heb nu een downloadscriptje gemaakt, welke via een GET request weet welke MP3 files er gedownload moet worden en dit vervolgens mbv headers ook uitvoert. Het punt is dat deze files staan opgeslagen als keys (geMD5'd enzo). Dat downloaden werkt allemaal prima, het punt is dat de files worden opgeslagen met die keynaam. Ik wil natuurlijk dat de file worden opgeslagen als artiest-songtitle.

Voordat ik aan een eventuele work around begin...kan ik in de headers een soort van 'alternative title' meegeven? Dus dat de file niet wordt opgeslagen als de filename zoals ie op de server staat.

$file staat dan nu de key in, en zo wordt ie ook opgeslagen:
1header("Content-Disposition: attachment; filename=$file");
*BURP*
pi_48921695
1
2
3
4
<?php
header
('Content-Disposition: attachment; filename="filename.mp3"');
readfile('orgineel.mp3');
?>
  woensdag 2 mei 2007 @ 12:14:41 #162
51748 H4ze
wait...what?
pi_48922251
quote:
Op woensdag 2 mei 2007 11:57 schreef Geqxon het volgende:

[ code verwijderd ]
Zo had ik het ook op php.net gevonden...maar dat werkt helaas niet

Ik heb nu dus dit (stonden nog meer header dingen in, maar die heb ik ff verwijderd omdat ik dacht dat het misschien daaraan lag):

1
2
3
4
5
<?php
header
("Content-Type: audio/mpeg");
header("Content-Disposition: attachment; filename=$file");
readfile('blablabla.mp3');
?>


Hij blijft 'm gewoon opslaan als de inhoud van $file (dus das ook met de hele path erbij ).
*BURP*
pi_48922378
Je moet even oppassen dat je quotes 100% zoals op bovenstaand voorbeeld typt, daarnaast raad ik je aan een constructie als:

1
2
3
<?php
"Hans" . $tussennaam . "Dieter"
?>


te gebruiken om de variabele in de string te verwerken.
  woensdag 2 mei 2007 @ 12:19:41 #164
52200 ViPeRII
It's a good day to die
pi_48922412
Voorbeeltje voor H4ze:

<?php
$filename = "theDownloadedFileIsCalledThis.mp3";
$myFile = "/absolute/path/to/my/file.mp3";

$mm_type="audio/mpeg";

header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($myFile)) );
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");

readfile($myFile);

?>
-- ViPeRII --
  woensdag 2 mei 2007 @ 12:33:00 #165
51748 H4ze
wait...what?
pi_48922829
quote:
Op woensdag 2 mei 2007 12:18 schreef Geqxon het volgende:
Je moet even oppassen dat je quotes 100% zoals op bovenstaand voorbeeld typt, daarnaast raad ik je aan een constructie als:
[ code verwijderd ]

te gebruiken om de variabele in de string te verwerken.
Jep je hebt gelijk. Had die quotes ook al gelijk aangepast, maar het werkte toen alsnog niet...
quote:
Op woensdag 2 mei 2007 12:19 schreef ViPeRII het volgende:
Voorbeeltje voor H4ze:

<?php
$filename = "theDownloadedFileIsCalledThis.mp3";
$myFile = "/absolute/path/to/my/file.mp3";

$mm_type="audio/mpeg";

header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($myFile)) );
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");

readfile($myFile);

?>
Mooi! Met deze doet ie wel wat ik wil.

Thnx voor jullie hulp jongens
*BURP*
  woensdag 2 mei 2007 @ 12:57:38 #166
51748 H4ze
wait...what?
pi_48923534
Hmm..ik heb toch iets te vroeg gejuicht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$filename 
"theDownloadedFileIsCalledThis.mp3";
$myFile "/absolute/path/to/my/file.mp3";

$mm_type="audio/mpeg";

header("Cache-Control: public, must-revalidate");
header("Pragma: hack"); 
header("Content-Type: " $mm_type);
header("Content-Length: " .(string)(filesize($myFile)) );
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");

readfile($myFile);
?>


Als ik readfile($myFile); verander in readfile("nieuwenaam.mp3"), dan blijft ie 'm alsnog opslaan als $filename (dus als de originele filename zoals ie op de server staat)
*BURP*
pi_48923740
Het enige wat de readfile functie doet, is het uitlezen van een bestand en dat op het scherm schrijven.

In jouw geval zul je dus readfile("origineelgekmd5geencodeerdmp3bestand.mp3") hebben.
  woensdag 2 mei 2007 @ 13:09:10 #168
51748 H4ze
wait...what?
pi_48923935
Oke..dan ben ik weer terug bij af :p

Er moet toch een manier zijn dat ik de mp3 zelf een alternatieve naam geef (dus niet de naam van hoe ie op de server staat) en dat de file dan met die alternatieve titel wordt opgeslagen op de harde schijf van de downloader.
*BURP*
pi_48924274
Om de code uit te leggen:

  • Je begint met het aanbieden van het bestand. Je zegt tegen de gebruiker wat voor type bestand het is, en wat de naam van dit bestand is.
  • Vervolgens, als de gebruiker het bestand accepteert, zal de download starten. Als iemand een tekstbestand wilt downloaden, zal een simpele echo "Hallo.txt" voldoende zijn. In jouw geval wil je de inhoud van het MP3 bestand doorzenden, en heb je dus de readfile() functie nodig. Deze leest een bestand uit, en schrijft het naar de gebruiker toe. Deze ontvangt deze tekst, en schrijft het in "nieuwbestandsnaam.mp3" weg.
  • pi_48924899
    Een rauw voorbeeld om het e.e.a. duidelijk te maken:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    $output 
    "";

    $gegevens = array(
                array(
    "Voornaam" => "Ans"     "Achternaam" => "Albrechts"),
                array(
    "Voornaam" => "Bram"     "Achternaam" => "Bertus"),
                array(
    "Voornaam" => "Carol"    "Achternaam" => "Cyprus"),
                array(
    "Voornaam" => "Dieter""Achternaam" => "de Vries"),
                );
            
    foreach (
    $gegevens as $persoon){
        
    $output .= """ . $persoon['Voornaam'] . "";"" . $persoon['Achternaam'] . ""n";
    }


    header('Content-type: application/csv');
    header('Content-Disposition: attachment; filename="bedrijfsgegevens '.date("H_i - d-m-Y",time()).'.csv"');

    echo 
    $output;
    ?>
      woensdag 2 mei 2007 @ 14:57:36 #171
    51748 H4ze
    wait...what?
    pi_48927414
    Oke thnx Geqxon

    Tis nu helemaal duidelijk en het werkt nu zoals ik wil....ik maakte een paar gruwelijke denkfouten (nog steeds nasleep van het weekend of zo ).
    *BURP*
    pi_48927788
    Weekend? En dan te bedenken dat ik al weer een dag of twee a drie aan het werk ben
    pi_48946549
    Ik heb me weer eens in een lastig mysql parket gemanouvreerd.
    Ik heb een tabel films en een tabel acteurs. En je raadt het al, die twee hebben een 1 op meer relatie, dus heb ik een koppeltabel gemaakt, met een kolom film en een kolom acteur.

    Maar nu wil ik dus als ik het id van een film pak, alle acteurs in die film weergeven.

    1
    2
    3
    4
    5
    SELECT DISTINCT m.title, m.description, a.name
    FROM movies m
    JOIN binding b ON m.id = b.movie
    JOIN actors a ON b.actor = a.id
    WHERE m.id =1


    werkt wel, maar ik krijg per acteur een record terug:

    1
    2
    3
    title     description    name
    Titanic   Bootje zinkt   Leonardo di Caprio
    Titanic   Bootje zinkt   Kate Winslet

    Maar ik wil per film een record terug:

    1
    2
    title     description    name1                name2
    Titanic   Bootje zinkt   Leonardo di Caprio   Kate Winslet


    Hoe doe ik dit?
    O say, can you see, by the dawn's early light. What so proudly we hailed, at the twilight's last gleaming...
    pi_48946649
    Ik zou haast zeggen dat je iets dergelijks in PHP af moet handelen, een record opvragen gecombineerd uit meerdere velden van dezelfde tabel gaat tricky worden.
    pi_48946755
    Ik zou het oplossen met 2 queries: 1 voor de film zelf, en 1 voor de acteurs bij die film. Lijkt me het snelst/handigst toch?
    pi_48946867
    @George.W.Bush

    Ik zie twee oplossingen op dit ogenblik. Eén oplossing vereist dat jij gaat specificeren wat je nu precies wilt, wil je echt een variabel aantal kolommen terugkrijgen? Wat is er precies mis met de 'per acteur een record' methode?

    De andere oplossing omvat overstappen op een andere RDBMS die custom group aggregate functions ondersteunt zodat je je acteurs in één veld kunt samenvatten, bijvoorbeeld in een comma separated list
    pi_48946913
    quote:
    Op woensdag 2 mei 2007 23:01 schreef Piles het volgende:
    Ik zou het oplossen met 2 queries: 1 voor de film zelf, en 1 voor de acteurs bij die film. Lijkt me het snelst/handigst toch?
    Dat is ook onderdeel van het gebrek aan informatie als het om één film gaat die GWB wil opvragen, dan is dat inderdaad een goede oplossing. Gaat het om meerdere films dan wordt het al gauw slechter.
    pi_48947114
    quote:
    Op woensdag 2 mei 2007 23:04 schreef JeRa het volgende:
    @George.W.Bush

    Ik zie twee oplossingen op dit ogenblik. Eén oplossing vereist dat jij gaat specificeren wat je nu precies wilt, wil je echt een variabel aantal kolommen terugkrijgen?
    Mjah ik bedacht me dat ik dan met een extra loopje door de variabele velden kan lopen. Dan hoef ik me niet druk te maken over 'in welke film zit ik nu'
    quote:
    Wat is er precies mis met de 'per acteur een record' methode?
    Ik wil het uiteraard presenteren per film. Met bovenstaande query moet ik me dus in php bezig gaan houden of de filmnaam nog gelijk is aan het vorige rondje. En zo ja, dan de gevonden acteur in de tabel spugen, en zo nee de row afsluiten en een nieuwe row aanmaken.

    *denkt* hmz, dat hoeft niet eens want ik weet dat het om 1 film gaat ivm de WHERE clausule. Een simpel tellertje in de while lus is genoeg. Als het tellertje > 1 weet ik dat ik alleen de acteurs moet parsen
    quote:
    De andere oplossing omvat overstappen op een andere RDBMS die custom group aggregate functions ondersteunt zodat je je acteurs in één veld kunt samenvatten, bijvoorbeeld in een comma separated list
    Ik ben even snel wat in elkaar an het zetten voor een familielid.... Ik doe het wel met de 'record per acteur' methode.
    O say, can you see, by the dawn's early light. What so proudly we hailed, at the twilight's last gleaming...
      woensdag 2 mei 2007 @ 23:11:14 #179
    104583 cyberstalker
    Een krachtig neen!
    pi_48947164
    Zou GROUP_CONCAT niet iets zijn?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
        m.title,
        m.description,
        GROUP_CONCAT(a.name)
    FROM
        movies m
    JOIN
        binding b,
        actors a
    ON
        m.id = b.movie AND
        b.actor = a.id
    GROUP BY
        m.id


    Dan krijg je de acteurs terug als een kommagescheiden lijst die je vervolgens met php kunt explode()n.
    Hope for the best, prepare for the worst.
    pi_48947170
    quote:
    Op woensdag 2 mei 2007 23:05 schreef JeRa het volgende:

    [..]

    Dat is ook onderdeel van het gebrek aan informatie als het om één film gaat die GWB wil opvragen, dan is dat inderdaad een goede oplossing. Gaat het om meerdere films dan wordt het al gauw slechter.
    Ik wil inderdaad een beetje rekening houden met performance.
    O say, can you see, by the dawn's early light. What so proudly we hailed, at the twilight's last gleaming...
    abonnement Unibet Coolblue Bitvavo
    Forum Opties
    Forumhop:
    Hop naar:
    (afkorting, bv 'KLB')