Avatar billede Slettet bruger
12. juli 2007 - 10:11 Der er 42 kommentarer og
1 løsning

Finde nyeste dato fra felt i myaql

Hej.

Jeg har lige fået rigig god hjælp her:

http://www.eksperten.dk/spm/787202

og kan udskrive en dato.

Men nu er der pludselig en nyere dato i feltet Dato.

Hvordan finder jeg så lige ud af at finde den nyeste dato ?

Det er altid den nyeste der skal udskrives som det bliver i det andet spørgsmål.

Ole.
Avatar billede sw_red_6 Nybegynder
12. juli 2007 - 10:13 #1
med sql..?

Prøv med SELECT MAX(DATO)...
Avatar billede Slettet bruger
12. juli 2007 - 10:34 #2
Min select er: SELECT * FROM `feltnavn` ORDER BY id ASC

Og den skal helst blive ved mad at udskrive fra id, så hvordan mener du jeg kan gøre det du foreslår ?
Avatar billede Slettet bruger
12. juli 2007 - 10:36 #3
Hvis du udnytter mysql 100%, så vælger du dit data felt med datatypen 'date' og så kan du bare i dit udtræk:
SELECT * FROM feltnavn ORDER BY date ASC
Avatar billede Slettet bruger
12. juli 2007 - 10:54 #4
Ok, det er så ikke tilfældet. Feltet er et textfelt, og datoerne indskrevet som eks. 040707 men når noget nyt indskrives kan det være 100707 og så er det jo det højeste.

Fra det tidligere eksempel som jeg smed link til ender det her:

$date = $row_VisBoeger['Dato'];

Men den tager så den første i rækken. Den skulle gerne finde den højeste dato og udskrive. Kan man ikke det ?
Avatar billede Slettet bruger
12. juli 2007 - 11:33 #5
Jeg lavede lige en test med date. Hvis jeg bruger den så omskrives 040707 til 2004-07-07 og det betyder der skal rettes en masse felter for at få det til at passe. Det virker noget uoverskueligt.
Avatar billede danielss Nybegynder
12. juli 2007 - 11:45 #6
Kan du ikke bare bruge ORDER BY id DESC?
Avatar billede danielss Nybegynder
12. juli 2007 - 11:47 #7
Ellers kan du bare bruge SELECT MAX(dato) som sw_red_6 skriver

SELECT * FROM felt WHERE dato=(SELECT MAX(dato))
Avatar billede Slettet bruger
12. juli 2007 - 11:56 #8
Det virker med DESC hvad dato angår, men så udskriver den alt det andet omvendt :)

select max kan jeg ikke få til at virke, så udskriver den kun nogle tegn, og ingen data.
Avatar billede Slettet bruger
12. juli 2007 - 12:01 #9
Er det sådan her du mener:

$query_VisBoeger = "SELECT * FROM feltnavn ORDER BY id ASC WHERE Dato=(SELECT MAX(Dato))";

Datofeltet er med stort D, men den skriver jeg skal læse manualen om Max. Er dette til php 5 ? Jeg bruger 4.x.
Avatar billede danielss Nybegynder
12. juli 2007 - 12:20 #10
Det er lige meget om det er php 4 eller 5 du bruger, da det er en sql linie.

Men er dette rigtigt forstået:

Du har en tabel med noget info i, og et dato felt som har følgende syntaks: ååmmdd

Du vil have den nyeste dato.
Avatar billede Slettet bruger
12. juli 2007 - 12:25 #11
Næsten rigtigt.

Dato står som 040707 altså ddmmåå - det er den måde det er skrevet ind i tabellen på.
Avatar billede Slettet bruger
12. juli 2007 - 14:26 #12
Læste lige igen. Det er et VARCHAR felt og ikke et specielt dato felt.

Og det er rigtigt at jeg gerne vil finde den nyeste dato, uden at ødelægge rækkefølgen af resten af data.

Ole.
Avatar billede Slettet bruger
12. juli 2007 - 16:02 #13
Inde du kommer alt for godt igang med dit projekt, ville jeg ændre data typen!
Avatar billede danielss Nybegynder
12. juli 2007 - 16:36 #14
Jeg ville nok bruge et timestamp de er meget lettere at have med at gøre.. Jeg tror ikke rigtigt du kan sortere efter den højeste dato da det er ddmmyy... hvis det havde været yymmdd så havde det jo stået som et almindeligt tal som man så kunne lave en ORDER BY ud af... men når du indsætter en ting, så får den en id, så spørgsmålet er om du kun sætter ting ind som den nyeste dato, eller om du sætter en gammel ting ind som så får et højt id.
Avatar billede Slettet bruger
12. juli 2007 - 16:42 #15
Det lyder jo ikke godt. Man kan nok ikke i SELECT, men man kan vel finde det i et array i php ? En nyere dato vil jo være et højere tal uanset hvilken dato det er.

Det vil jo være noget af et job at lave alle datoer om :) men det kan selvfølgelig lade sig gøre.

Hvis det er et rigtigt dato felt, hvad vil I så foreslå ? Såa kan jeg jo evt. eksperimentere lidt med at få det til at virke på en lille test base, og virker det, må jeg jo lave lidt slavearbejde. Problemet er at det er indskrevet, men jeg kan selvfølgelig rette det.
Avatar billede danielss Nybegynder
12. juli 2007 - 16:48 #16
du kan gøre det i php at du trækker alle rækker ud.. bryder tallet om for hver andet ciffer, og sætter det sammen igen så årstallet er forrest... derefter kan du finde det højeste og finde ud af hvilken id tallet har og så trække det id ud af databasen.. men det er alt for besværligt.. du skal hellere lave dato feltet om..
Avatar billede Slettet bruger
12. juli 2007 - 17:30 #17
Nu har jeg kopiet en lille tabel og rettet Dato til date - ikke tamestamp, der skal ikke være tid på.

Hvordan får jeg så hold i problemet ? Nu virker den hjælp jeg fik i det andet spørgsmål jo heller ikke mere. Der skal jo skrives noget andet. Der er dæleme noget at eksperimentere med :)

Ole.
Avatar billede Slettet bruger
12. juli 2007 - 17:30 #18
Og jeg har selvfølgelig også rettet datoen til mysql format.
Avatar billede Slettet bruger
12. juli 2007 - 17:43 #19
Hold da op. Mail fra spørgsmålet er en hel time forsinket.
Avatar billede Slettet bruger
12. juli 2007 - 17:59 #20
Som danielss skriver så kan du gøre det via. php, netop det med at rette datoerne til det rigtige format.

Hvis du vil ha' tid på din dato, skal du vælge data type 'datetime' istedet for 'date' som er dato, og 'time' som kun er tid, datetime er en blandning.

Kigger lige på dit andet spørgsmål, ved ikke hvad det er der skal laves om endnu.
Avatar billede Slettet bruger
12. juli 2007 - 18:02 #21
Jeg tror jeg har fået den til at skrive ud, men i forkert format. Den skriver som det står i databasen nu. Alså mysql format. Det skal så vendes til dansk format, og dansk måned tekst.

Men jeg synes ikke rigtig jeg kan finde noget om det. Det er alt sammen noget der bruges i langbortistan, og ikke med måmed som tekst.
Avatar billede Slettet bruger
12. juli 2007 - 18:04 #22
nu er det faktisk meget nemmere:
<?PHP
setLoc('da_DK.ISO_8859-1');
$date = "2007-07-13 18:04:00";
/* Du kan se flere måder at skrive tingene ud på
  http://www.php.net/date
*/
echo date("j F Y", $date) . "<br />\n";
echo date("r" $date) . "<br />\n";

?>
Avatar billede Slettet bruger
12. juli 2007 - 18:07 #23
3. sidste linje skal lige rettes til
echo date("r", $date) . "<br />\n";
Avatar billede Slettet bruger
12. juli 2007 - 18:23 #24
Skal $date ikke defineres før kald af den funktion, som selvfølgelig manglede da jeg begyndte forfra :)

Men den skriver 1. januar 1970 og det rigtige i $date er 2007-07-04 og skulle gerne ende med at skrive 4. juli 2007

Det er da noget indviklet. Jeg har også forsøgt at gennemskue noget af det der står på http://www.php.net/date men det synes jeg ikke rigtig at have held med.
Avatar billede Slettet bruger
12. juli 2007 - 18:57 #25
Det her virker nu:

<?PHP
$date = $row_VisBoeger['Dato'];
$year = substr($date, 0, 4);
$month = substr($date, 6, 2);
$day = substr($date, 9, 2);

setLoc('da_DK.ISO_8859-1');

function setLoc($loc) {
  $i=0;
  do {
    $locale_result = setlocale(LC_TIME, $loc);
  } while ($locale_result != $loc && $i++ < 10);
}
$new_date = strftime("%e. %B %Y", mktime(0, 0, 0, $month, $day, $year));
?>
<?php echo $new_date; ?>


men jeg mangler stadig at finde den højeste dato. Feltet er date og ikke timestamp - ingen tid med.

Så nu skrivere den 4. juli 2007 som den skal.

Men det må jo være et skridt på vejen :)

Ole.
Avatar billede Slettet bruger
13. juli 2007 - 08:24 #26
Hmm, nu er datoen gemt i MySQL format. Når jeg forsøger at rette til i SELECT linien som I har foresæået tidligere, skriver den 1. januar 1970.

Det synes jeg ikke rigtig jeg kan ændre på.

Så jeg mangler stadig at få den til at skrive den nyeste dato.

Andre forslat, eller rettelser ?

Ole.
Avatar billede Slettet bruger
13. juli 2007 - 09:32 #27
Disse variabler skal rettes til:

$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 8, 2);

Ellers udskriver den forkert dato.

Resten af ovenstående ser ellers ud til at virke, sålænge det er den første dato i rækken.
Avatar billede Slettet bruger
13. juli 2007 - 09:40 #28
Fordi der lige skal strtotime() omkring datoen.

Sådan her:



<?PHP
setLoc('da_DK.ISO_8859-1');
$date = "2007-07-13 18:04:00";
/* Du kan se flere måder at skrive tingene ud på
  http://www.php.net/date
*/
echo date("j F Y", strtotime($date)) . "<br />\n";
echo date("r" strtotime($date)) . "<br />\n";

?>
Avatar billede Slettet bruger
13. juli 2007 - 09:58 #29
Datoen bliver tilrettet her:

$new_date = strftime("%e. %B %Y", mktime(0, 0, 0, $month, $day, $year));

og hvis jeg sætte strtotime omkrin ved echo så skriver den -1.

echo strtotime($new_date);  giver -1

Jeg har sikket misforstået noget, men jeg har rodet rundt her på eksp og på nettet og er vist ved at være rigtig meget forvirret.
Avatar billede Slettet bruger
13. juli 2007 - 16:17 #30
Slet ingen løsning ? Jeg har nærmest opgivet at få det til at virke.

Feltet i tabellen er et DATE felt nu, og jeg kan få den til at gemme og rette og indskrive datoen nu.

Men få den til at finde den højeste (nyeste dato) kan jeg altså ikke få den til.
Avatar billede Slettet bruger
14. juli 2007 - 02:55 #31
Du skal jo bruge min, det hele af det jeg skrev.
Lav dato feltet til datatype datetime, og så bruge min kode.
Avatar billede Slettet bruger
14. juli 2007 - 08:03 #32
Jeg forstår ikke hvorfor det skal være datetime, når jeg kun skal bruge datoen. Så må date vel være ok ?

Nu har jeg lige fået det til at virke med at índsætte ny dato og rette/opdatere. Skal jeg så forfra en gang til ?

Ole.
Avatar billede Slettet bruger
14. juli 2007 - 10:55 #33
Ja så er date fint nok, forstod bare på dig at du også ville bruge tid.
Men ja så skal du forfra, derfor jeg sagde, du kan lige så godt rette det før projektet bliver for stort.
Men op til dig.
Avatar billede Slettet bruger
14. juli 2007 - 11:08 #34
SKAL det være TIMESTAMP for at få udskrevet den rigtige dato ?

Jeg HAR ændrer typen til DATE i databasen, og kan også bruge den.

Det er kun med at finde den nyeste dato der er problemet uden at ændre på rækkefølgen af alle andre data i basen.

Hvis jeg bruger denne:

SELECT * FROM tabelnavn ORDER BY Dato DESC

for jeg den nyeste dato skrevet ud, men så er rækkefølgen på alle andre data ændret. Det kan man sikkert ikke lave om på.

Smid nogle svar - så laver jeg et nyt spørgsmål senere, hvis det bliver nødvendigt. I har hjulpet mig rigtig langt.

Det her er også ved at være noget uoverskueligt :)

Tak for hjælpen.
Avatar billede Slettet bruger
14. juli 2007 - 11:35 #35
Forstår dig ikke, den sortere så dato den nyeste er øverest.
Hvad er det du vil ha'?
Avatar billede Slettet bruger
14. juli 2007 - 11:48 #36
Det eneste jeg gerne vil have er, at den finder den nyeste dato i tabellen, uden at ændre på udskrift rækkefølgen, som udskrives efter id.

Men det er jo ikke sikkert det bare lige kan lade sig gøre, og så må man jo prøve at opfinde noget andet :-)
Avatar billede Slettet bruger
14. juli 2007 - 12:24 #37
Det vil jo aldrig kunne lade sig gøre!
Fordi hvis:
id 1 har datoen 2007-07-14
id 2 har datoen 2007-07-15
id 3 har datoen 2007-07-13

Her vil det være id 3, 1, 2
Avatar billede Slettet bruger
14. juli 2007 - 12:27 #38
Jamen så er problemet jo løst :)

Tak for hjælpen alligevel. Der bliver jo også brugt tid på at hjælpe, så smid et svar, dem der deltager, helst hurtigt, så jeg ikke glemmer dette.

Ole.
Avatar billede Slettet bruger
14. juli 2007 - 13:39 #39
svar
Avatar billede Slettet bruger
14. juli 2007 - 15:39 #40
Hmm, fik lige en idé :)

Først denne

"SELECT * FROM tabelnavn ORDER BY Dato DESC";
....
$date = $row_VisBoeger['Dato'];

og derefter

"SELECT * FROM tabelnavn ORDER BY id ASC";

Og så vise som jeg plejer.

Så få jeg datoen pille ud, og får derefter vist som det skal. Det holder sikkert ikke med mange hundrede poster, så bliver den måske sløv, men jeg tror aldrig der kommer mere end 50 til 75 poster i tabellen :) Sikkert Fub og Svindel, men det virkede.

Flere der vil svare ellers løber coldgate med puljen.

Ole.
Avatar billede Slettet bruger
14. juli 2007 - 22:51 #41
Det her gjorde det lidt hurtigere :)

"SELECT Dato FROM tabelnavn ORDER BY Dato DESC";

Mange tak for jeres hjælp. Hvis nogen kommer forsent, og skulle have points, må så brokke sig. Hvis ikke jeg får afsluttet spørgsmål, glemmer jeg det bare.

Ole.
Avatar billede Slettet bruger
15. juli 2007 - 02:12 #42
Forstår det ikke!
For du kan ikke få det som du vil ha' det.

Du vil ha' det nyeste ide øverest men samtidig også datoen, men ikke sikkert de matcher jo.

Prøv giv et eksempel ligesom jeg gjorder ala.
id 1 har datoen 2007-07-14
id 2 har datoen 2007-07-15
id 3 har datoen 2007-07-13
Avatar billede Slettet bruger
15. juli 2007 - 07:43 #43
Jeg tror jeg kan se hvd dit problem er nu.

Du tror at datoen skal udskrives, det skal den kun den ene gang, og det er den nyeste. Jeg har lige haft forbindelse med personen der skal bruge det, og datoen skal kun bruges een gang. Så jeg kunne rent faktisk nøjes med et felt i en anden tabel til datoen. Jeg havde nemlig opfattet at datoen skulle gemmes sammen med andre data. Det skal så istedet være daga dato :)  Nå, men der blev da eksperimenteret en masse,

Tak for deltagelsen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester