Supernybörjare-fråga om hantera data med SQL

Permalänk
Medlem

Supernybörjare-fråga om hantera data med SQL

Jag har börjat pilla lite med databas och jag är ivrig att nå målet, och brister då i tålamod att gå rätt väg och läsa manualer först.

Jag hämtar data som exempelvis ser ut som följande

[1] => stdClass Object ( [_ID] => 28 [cct_status] => publish [borjan_av_veckan] => 4.60 [cct_created] => 2022-04-17 06:08:39 [cct_modified] => 2022-04-17 06:25:12 [datum] => 1637280000 [slutet_av_veckan] => 7.10 )

Hämtat ur [vikt_content] tabel

Mitt slutmål är
1) begränsa till år 2021.
2) Summera [borjan_av_veckan]+[slutet_av_veckan].
3) och Lista det per veckonummer. WEEK([datum])

Vecka.....Total vikt
46..........11,7

Det finns säkert någon på forumet som tycker detta är superlätt och kan säga hur man bör formulera det i sql.
Utifrån det skulle jag motiveras att förstå mer.

Permalänk
Medlem

Nu några timmar senare så har jag prövat mig fram till något som delvis fungerar.

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ;

Den skapar alltså ett nytt värde av unix-timestampen och döper det till year.
Jag sitter nu och försöker förstå hur jag dels kan köra flera kommandon i samma syntax(?)
så jag göra ett nytt värde 'week'.

Har hittat en som skriver exemplet

| formatDate(parseDate(timestamp, "yyyy-MM-dd'T'HH:mm:ss.SSS", "UTC"), "w") as week

Men jag kommer inte på hur jag ska lyckas köra flera kommandon samtidigt?

Permalänk
Medlem
Skrivet av faber:

Nu några timmar senare så har jag prövat mig fram till något som delvis fungerar.

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ;

Den skapar alltså ett nytt värde av unix-timestampen och döper det till year.
Jag sitter nu och försöker förstå hur jag dels kan köra flera kommandon i samma syntax(?)
så jag göra ett nytt värde 'week'.

Har hittat en som skriver exemplet

| formatDate(parseDate(timestamp, "yyyy-MM-dd'T'HH:mm:ss.SSS", "UTC"), "w") as week

Men jag kommer inte på hur jag ska lyckas köra flera kommandon samtidigt?

Det ser ut som att du kör MSSQL vilket jag inte har jobbat med, men i MySQL lägger du det bara i SELECT delen

SELECT WEEK('din-datum-kolumn-du vill-använda') as weeknumber FROM vikt_content;

MSSQL verkar ha något liknande enligt StackOverflow, https://stackoverflow.com/questions/42794544/get-week-number-...
Kolla där om det löser ditt problem.

Det exempel du ger med formatDate(parseDate verkar komma från Sumo Logic, och är inte ett kommando du kan köra direkt i databasen.

Permalänk
Medlem

Tack.
Hur är det att utöka med fler finesser i samma..process..?

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022;

SELECT borjan_av_veckan+slutet_av_veckan AS total_vikt FROM vikt_content;

Båda fungerar om jag kör dessa en i taget, men jag kommer inte på hur jag kan sammafoga dessa till en fungerade rad, eller är det inte möjligt?

Permalänk
Medlem

Jag har inga svar på dina frågor, men vill flika in så att du börjar använda rätt terminologi så det blir lättare att ställa korrekt frågor för dig: Det du kallar "Kommando" och "Process" heter "fråga", eller på engelska "query".

Permalänk
Avstängd

Det är inte så enkelt att du bara behöver lägga till group by?

Select Id, beginning+end as tot, year
From foo
Where year =2022
Group by id, year;

På mobil, så koden blir förenklad.

Permalänk
Medlem

Efter biljoner timmar så kom jag på hur jag kan göra två [jag vet inte vad det kallas men jag håller med dlq84 att det vore en fördel om jag skrev rätt]

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year, FROM_UNIXTIME(datum, '%u') AS week FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ;

Det var ett kommatecken som behövdes och att saker var i rätt följd.
*pew*
Nu ska jag bara lyckas komma på hur jag lägger till fler finesser.

Permalänk
Medlem
Skrivet av faber:

Efter biljoner timmar så kom jag på hur jag kan göra två [jag vet inte vad det kallas men jag håller med dlq84 att det vore en fördel om jag skrev rätt]

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year, FROM_UNIXTIME(datum, '%u') AS week FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ;

Det var ett kommatecken som behövdes och att saker var i rätt följd.
*pew*
Nu ska jag bara lyckas komma på hur jag lägger till fler finesser.

Har du provat att bara slå ihop dom?
Och börja koda på engelska det kommer underlätta läsbarheten en del när du inte behöver krångla med åäö

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, borjan_av_veckan+slutet_av_veckan AS total_vikt FROM_UNIXTIME(datum, '%Y') AS year, FROM_UNIXTIME(datum, '%u') AS week FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ;

Permalänk
Medlem

MIN(FROM_UNIXTIME(datum)) AS convert_date

Detta resulterar med 2021-11-12 01:00:00

Hur kan jag trixa om så att den sparar som '%d-%m-%Y' ?

När jag prövar FROM_UNIXTIME(datum,'%d-%m-%Y') så hämtar den fel datum, då tar den med lägst dagnummer istället för äldsta inlägget.

Är det rätt att göra såhär:

MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post

Permalänk
Medlem
Skrivet av faber:

MIN(FROM_UNIXTIME(datum)) AS convert_date

Detta resulterar med 2021-11-12 01:00:00

Hur kan jag trixa om så att den sparar som '%d-%m-%Y' ?

När jag prövar FROM_UNIXTIME(datum,'%d-%m-%Y') så hämtar den fel datum, då tar den med lägst dagnummer istället för äldsta inlägget.

Är det rätt att göra såhär:

MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post

Vill du sortera efter datum, fallande? D.v.s. börja med senaste först och sluta med det första? Prova i så fall att använda dig av ORDER BY [column] DESC

T.ex.

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year, FROM_UNIXTIME(datum, '%u') AS week FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ORDER BY datum DESC ;

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Vill du sortera efter datum, fallande? D.v.s. börja med senaste först och sluta med det första? Prova i så fall att använda dig av ORDER BY [column] DESC

T.ex.

SELECT _ID,borjan_av_veckan,datum,slutet_av_veckan, FROM_UNIXTIME(datum, '%Y') AS year, FROM_UNIXTIME(datum, '%u') AS week FROM vikt_content WHERE FROM_UNIXTIME(datum, '%Y') = 2022 ORDER BY datum DESC ;

Tack. Fast jag vill inte sortera, utan mitt mål är att plocka ut datumet på det äldsta inlägget.

MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post

gör detta fast jag blir lite förvirrad att den "sparar två värden" så antingen är det previewen som lurar mig eller så är det knas i min textrad.

Array ( [0] => stdClass Object ( [MIN(datum)] => 1636675200 [oldest_post] => 12/11-2021 ) )

Oldest_post blir rätt men jag hade inte som avsikt att "[MIN(datum)] => 1636675200" ska komma med i array'en.

Edit - det blev inte rätt.

SELECT MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post_ever, MAX(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS newest_post_ever FROM content;

blev

Array ( [0] => stdClass Object ( [MIN(datum)] => 1636675200 [oldest_post_ever] => 12/11-2021 [MAX(datum)] => 1649980800 [newest_post_ever] => 12/11-2021 ) )

Sista datumet skulle vara ett 2022 datum. Så "omvandlingen" fungerar inte.

Permalänk
Medlem
Skrivet av faber:

Tack. Fast jag vill inte sortera, utan mitt mål är att plocka ut datumet på det äldsta inlägget.

MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post

gör detta fast jag blir lite förvirrad att den "sparar två värden" så antingen är det previewen som lurar mig eller så är det knas i min textrad.

Array ( [0] => stdClass Object ( [MIN(datum)] => 1636675200 [oldest_post] => 12/11-2021 ) )

Oldest_post blir rätt men jag hade inte som avsikt att "[MIN(datum)] => 1636675200" ska komma med i array'en.

Edit - det blev inte rätt.

SELECT MIN(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS oldest_post_ever, MAX(datum), FROM_UNIXTIME(datum,'%d/%m-%Y') AS newest_post_ever FROM content;

blev

Array ( [0] => stdClass Object ( [MIN(datum)] => 1636675200 [oldest_post_ever] => 12/11-2021 [MAX(datum)] => 1649980800 [newest_post_ever] => 12/11-2021 ) )

Sista datumet skulle vara ett 2022 datum. Så "omvandlingen" fungerar inte.

Då är jag med
Det du gör med din SQL är att hämta; Det äldsta datumet, det äldsta datumet omvandlat från UNIX till D/M-Y, det senaste datumet, det senaste datumet omvandlat från UNIX till D/M-Y.
Kommatecken är en separator och i ditt fall vilka kolumner du vill hämta.

Vill du endast hämta äldsta samt senaste datumet så kan du fortsätta på ditt sätt:

SELECT FROM_UNIXTIME(MIN(datum),'%d/%m-%Y') AS oldest_post_ever, FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_post_ever FROM content;

Här hämtar du alltså två kolumner från tabellen content, som får namnen oldest_post_ever & newest_post_ever

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Då är jag med
Det du gör med din SQL är att hämta; Det äldsta datumet, det äldsta datumet omvandlat från UNIX till D/M-Y, det senaste datumet, det senaste datumet omvandlat från UNIX till D/M-Y.
Kommatecken är en separator och i ditt fall vilka kolumner du vill hämta.

Vill du endast hämta äldsta samt senaste datumet så kan du fortsätta på ditt sätt:

SELECT FROM_UNIXTIME(MIN(datum),'%d/%m-%Y') AS oldest_post_ever, FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_post_ever FROM content;

Här hämtar du alltså två kolumner från tabellen content, som får namnen oldest_post_ever & newest_post_ever

Riktigt nice!
Nu är jag nära mållinjen för att kunna släppa sql och återgå till det grafiska pysslet.
Och då frestas jag ju såklart av att få hjälp av din expertis.

<senaste datumet> <slutet_av_veckan+borjan_av_veckan> AS latest_week_total
<näst senaste datumet> <slutet_av_veckan+borjan_av_veckan> AS previous_week_total

Jag vill att
om latest_week_total är större än previous_week_total så ska den spara 'up' AS week_icon
om latest_week_total är mindre än previous_week_total så ska den spara 'down' AS week_icon
om latest_week_total är samma som previous_week_total så ska den spara 'neutral' AS week_icon

Ifall du kan trixa ihop det så kanske jag slipper sitta här till i natt.

Permalänk
Medlem
Skrivet av faber:

Riktigt nice!
Nu är jag nära mållinjen för att kunna släppa sql och återgå till det grafiska pysslet.
Och då frestas jag ju såklart av att få hjälp av din expertis.

<senaste datumet> <slutet_av_veckan+borjan_av_veckan> AS latest_week_total
<näst senaste datumet> <slutet_av_veckan+borjan_av_veckan> AS previous_week_total

Jag vill att
om latest_week_total är större än previous_week_total så ska den spara 'up' AS week_icon
om latest_week_total är mindre än previous_week_total så ska den spara 'down' AS week_icon
om latest_week_total är samma som previous_week_total så ska den spara 'neutral' AS week_icon

Ifall du kan trixa ihop det så kanske jag slipper sitta här till i natt.

Om jag ska vara helt ärlig så låter det där mer som något du bör lösa utanför databasen. Du har ju redan logiken för det, så varför inte använda det när du hämtat din data? Hämta ut de värden du behöver och bearbeta din data utanför, i t.ex. PHP som det ser ut som att du använder dig av.

Men om du nu verkligen vill använda SQL så kan du använda dig av CASE

SELECT CASE WHEN latest_week_total > previous_week_total THEN 'up' WHEN latest_week_total < previous_week_total THEN 'down' ELSE 'neutral' END AS week_icon FROM (SELECT [?] AS latest_week_total, [?] AS previous_week_total FROM [table]);

ish

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Om jag ska vara helt ärlig så låter det där mer som något du bör lösa utanför databasen. Du har ju redan logiken för det, så varför inte använda det när du hämtat din data? Hämta ut de värden du behöver och bearbeta din data utanför, i t.ex. PHP som det ser ut som att du använder dig av.

Men om du nu verkligen vill använda SQL så kan du använda dig av CASE

SELECT CASE WHEN latest_week_total > previous_week_total THEN 'up' WHEN latest_week_total < previous_week_total THEN 'down' ELSE 'neutral' END AS week_icon FROM (SELECT [?] AS latest_week_total, [?] AS previous_week_total FROM [table]);

ish

Jag pysslar i en Wordpress plugin. Får en ruta där jag kan skriva sql query. Som jag kan ladda in i en annan sektion där plugin-skaparen har bestämt vad jag kan göra med datan. Så att säga. Så ju mer jag kan uppnå i queryn desto mer kan jag lyckas skapa genom deras begränsningar i steg 2 och 3.

Tack för exemplet, ska klura en stund hur jag får i sista pusselbitarna.

Permalänk
Medlem

Så att... Hur kan jag ändra FROM_UNIXTIME(MAX(datum),'%d/%m-%Y')
till att visa näst senaste?

FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') = [newest_postdate_ever] => 15/04-2022
FROM_UNIXTIME(MAX(datum),'%d/%m-%Y')-1 = [newest_postdate_ever] => 14

Vilket dels är ofullständigt datum och dagen stämmer inte, föregående datum är 8/04-2022

Permalänk
Medlem
Skrivet av faber:

Så att... Hur kan jag ändra FROM_UNIXTIME(MAX(datum),'%d/%m-%Y')
till att visa näst senaste?

FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') = [newest_postdate_ever] => 15/04-2022
FROM_UNIXTIME(MAX(datum),'%d/%m-%Y')-1 = [newest_postdate_ever] => 14

Vilket dels är ofullständigt datum och dagen stämmer inte, föregående datum är 8/04-2022

Det du skrev kommer såklart bli fel om du nu inte har ett datum dagen innan, då du förutsätter att näst senaste dag är exakt en dag innan senaste.

Du skulle kunna hämta ut det högsta värdet där det högsta värdet är mindre än det högsta värdet - självklart, ellerhur? Kanske inte.. men det är rätt smidigt för att hämta ut det näst högsta av ett värde. Plocka ut det som är högst efter det högsta helt enkelt
(Gör samma sak för MIN(), men där datum då är större än det lägsta värdet.)

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever, (SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM [table]) AS second_newest_postdate_ever FROM [table];

Nu är detta inte direkt optimerat då MAX() är ganska resurskrävande, men som nybörjare där millisekunder inte direkt spelar någon större roll så funkar det antagligen perfekt

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Det du skrev kommer såklart bli fel om du nu inte har ett datum dagen innan, då du förutsätter att näst senaste dag är exakt en dag innan senaste.

Du skulle kunna hämta ut det högsta värdet där det högsta värdet är mindre än det högsta värdet - självklart, ellerhur? Kanske inte.. men det är rätt smidigt för att hämta ut det näst högsta av ett värde. Plocka ut det som är högst efter det högsta helt enkelt
(Gör samma sak för MIN(), men där datum då är större än det lägsta värdet.)

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever, (SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM [table]) AS second_newest_postdate_ever FROM [table];

Nu är detta inte direkt optimerat då MAX() är ganska resurskrävande, men som nybörjare där millisekunder inte direkt spelar någon större roll så funkar det antagligen perfekt

Det känns som om jag tar världens krångligaste väg genom att spara som unix-tid.
Jag kan ganska enkelt trycka på en knapp och låta den spara som vanligt format. Fast är rädd att det kommer slåut min lilla databas jag gjort.

Tror du det är värt att återgå till normala datumformatet eller är det bra att vänja sig med hardcore-unix-style?

Permalänk
Medlem
Skrivet av Pamudas:

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever, (SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM [table]) AS second_newest_postdate_ever FROM [table];

Jag fick lägga till ett ) för att få den att fungera, fast den visar samma datum två gånger så min justering kanske var fel.

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever, (SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM content)) AS second_newest_postdate_ever FROM content;

Array ( [0] => stdClass Object ( [newest_postdate_ever] => 15/04-2022 [second_newest_postdate_ever] => 15/04-2022 ) )

Permalänk
Medlem
Skrivet av faber:

Jag fick lägga till ett ) för att få den att fungera, fast den visar samma datum två gånger så min justering kanske var fel.

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever, (SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM content)) AS second_newest_postdate_ever FROM content;

Array ( [0] => stdClass Object ( [newest_postdate_ever] => 15/04-2022 [second_newest_postdate_ever] => 15/04-2022 ) )

Missade sista parentesen
Det är inte så att du har två poster under samma datum?

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Missade sista parentesen
Det är inte så att du har två poster under samma datum?

Nej det ser inte så ut i tabellen. :/
Nu när jag uppdaterade queryn så försvann andra resultatet

Array ( [0] => stdClass Object ( [newest_postdate_ever] => 15/04-2022 [second_newest_postdate_ever] => ) )

sitter och prövar om det inte borde vara FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') på alla ställen istället för MAX(date) men får inte till det.

Permalänk
Medlem

Tänkt på att det är timestamp du jobbar med och inte datum.
När jag har jobbat med unxtimestamp har jag många gånger struntat i datum-queries och räknat ut datumintervallet i PHP istället.

Permalänk
Medlem
Skrivet av Meto:

Tänkt på att det är timestamp du jobbar med och inte datum.
När jag har jobbat med unxtimestamp har jag många gånger struntat i datum-queries och räknat ut datumintervallet i PHP istället.

Bra kommentar!

Det är betydligt lättare att räkna med timestamps så långt det är möjligt, och sen konvertera till date-time bara när det ska visas för användaren

Permalänk
Medlem
Skrivet av Meto:

Tänkt på att det är timestamp du jobbar med och inte datum.
När jag har jobbat med unxtimestamp har jag många gånger struntat i datum-queries och räknat ut datumintervallet i PHP istället.

Jag förstod inget av det du sa, men jag blev nyfiken. Hur skulle du beskriva skillnaden för en nybörjare?
- Bör jag låta bli att registrera unixtimestamp och låta den göra noteringar i rent datum? t.ex 2022-04-20 22:10
- finns en knapp som lätt ändrar det för mig och känns som jag inte behöver ta stora omvägar för få ut datum. Fast samtidigt är det lite roligt med utmaningar också.

Permalänk
Medlem
Skrivet av faber:

Jag förstod inget av det du sa, men jag blev nyfiken. Hur skulle du beskriva skillnaden för en nybörjare?
- Bör jag låta bli att registrera unixtimestamp och låta den göra noteringar i rent datum? t.ex 2022-04-20 22:10
- finns en knapp som lätt ändrar det för mig och känns som jag inte behöver ta stora omvägar för få ut datum. Fast samtidigt är det lite roligt med utmaningar också.

Oavsett om du väljer att spara det som ett datum eller i form av ticks: Spara det i UTC tidszon. I databasen ska tiden alltid vara "nollad" och sen är det upp till varje applikation att presentera den med respektive tidszonsskiftning.

Kanske inte aktuellt i ditt Wordpress scenario, men lär dig rätt från början ändå

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem
Skrivet av faber:

Jag förstod inget av det du sa, men jag blev nyfiken. Hur skulle du beskriva skillnaden för en nybörjare?
- Bör jag låta bli att registrera unixtimestamp och låta den göra noteringar i rent datum? t.ex 2022-04-20 22:10
- finns en knapp som lätt ändrar det för mig och känns som jag inte behöver ta stora omvägar för få ut datum. Fast samtidigt är det lite roligt med utmaningar också.

jag har lite svårt att förstå exakt vad du gör men du kanske inte rör PHP alls nu?
Inget fel med unixtimestamp du kan t.ex köra ORDER BY datum för att få raderna i datumordning och FROM_UNIXTIME(datum) AS human_date för att kunna läsa av datumet.

Permalänk
Medlem
Skrivet av Meto:

jag har lite svårt att förstå exakt vad du gör men du kanske inte rör PHP alls nu?
Inget fel med unixtimestamp du kan t.ex köra ORDER BY datum för att få raderna i datumordning och FROM_UNIXTIME(datum) AS human_date för att kunna läsa av datumet.

Rör inte PHP alls. Jag ser en ruta där jag knappar in SQL och i rutan intill så ser jag vad jag får ut för värden.
Sparar, så beger jag mig till en editor för göra webbsidan och där kan jag hämta in sql-värdet.

Du nämner lite kommandon men tar mig dagar att luska ut hur jag ska skriva ihop dessa till verkligt exempel

Justnu är inte problemet att omvandla. Det är att få den att plocka ut näst nyaste datumet.

[edit] jag har nu installerat en plugin som tillåter PHP och laborerar nu med att verkligen hacka runt i wordpress

Permalänk
Medlem

Näst senaste datumet kanske går att få ut med en subquery? Hoppade iofs bara in och läste ditt senaste inlägg så kanske har missat något.

select max(date) from table where date < (select max(date) from table)

Visa signatur

Grubblare

Permalänk
Medlem
Skrivet av faber:

Nej det ser inte så ut i tabellen. :/
Nu när jag uppdaterade queryn så försvann andra resultatet

Array ( [0] => stdClass Object ( [newest_postdate_ever] => 15/04-2022 [second_newest_postdate_ever] => ) )

sitter och prövar om det inte borde vara FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') på alla ställen istället för MAX(date) men får inte till det.

Har du testat koden utan att konvertera alls istället?

SELECT FROM_UNIXTIME(datum,'%d/%m-%Y') AS second_latest_date FROM content WHERE datum < ( SELECT MAX(datum) FROM content ) ORDER BY datum DESC LIMIT 1;

Kika på följande DBFiddle för att se resultatet Den hämtar i alla fall det näst senaste datumet.
https://www.db-fiddle.com/f/6yTqmtnAdXLwiAxwQd2bsB/47

Vill du hämta det näst äldsta datumet så ändrar du till MIN() och ASC istället för DESC

SELECT FROM_UNIXTIME(datum,'%d/%m-%Y') AS second_earliest_date FROM content WHERE datum > ( SELECT MIN(datum) FROM content ) ORDER BY datum ASC LIMIT 1;

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Pamudas:

Har du testat koden utan att konvertera alls istället?

SELECT FROM_UNIXTIME(datum,'%d/%m-%Y') AS second_latest_date FROM content WHERE datum < ( SELECT MAX(datum) FROM content ) ORDER BY datum DESC LIMIT 1;

Kika på följande DBFiddle för att se resultatet Den hämtar i alla fall det näst senaste datumet.
https://www.db-fiddle.com/f/6yTqmtnAdXLwiAxwQd2bsB/47

Vill du hämta det näst äldsta datumet så ändrar du till MIN() och ASC istället för DESC

SELECT FROM_UNIXTIME(datum,'%d/%m-%Y') AS second_earliest_date FROM content WHERE datum > ( SELECT MIN(datum) FROM content ) ORDER BY datum ASC LIMIT 1;

Puh. Fick göra om alla värden i tabellen då allt försvann när jag döpte om till engelska ord.
MEN! Ditt första exempel fungerar, den visar näst senaste datumet. Tack för era tålamod.