Kim T Skrevet 19. juni 2007 Del Skrevet 19. juni 2007 (endret) Hei! Jeg er en fersking når det gjeler php og MySQL. Har en ting jeg gjerne vil ta opp med dere som er mer dreven på dette. Jeg har en spørring opp mot databasen hvor jeg henter ut bloggen min. Den ser ut som følgende: $sql = "SELECT * FROM blogg WHERE dato_publisert <= now() AND ( dato_utgaar >= now() OR dato_utgaar = '0000-00-00' ) ORDER BY dato_publisert DESC, bloggid DESC"; Jeg vil gjerne konvertere dato formatet som er lagret i "dato_publisert". Det gjør jeg med å bruke denne spørringen: $sql = "SELECT DATE_FORMAT( dato_publisert, '%d.%M %y' ) as dato_publisert FROM blogg"; Er det mulig å kombinere disse to slik at jeg kun bruker en spørring? Kim Endret 19. juni 2007 av kimthoma Lenke til kommentar
kakkle Skrevet 19. juni 2007 Del Skrevet 19. juni 2007 (endret) Dette bør vel fungere: SELECT DATE_FORMAT(dato_publisert, '%d %M %y') as dato_formatert FROM blogg WHERE dato_publisert <= now() AND ( dato_utgaar >= now() OR dato_utgaar = '0000-00-00' ) ORDER BY dato_publisert DESC, bloggid DESC Du får da tak i den formaterte datoen, ved å spørre etter feltet "dato_formatert" Endret 19. juni 2007 av kakkle Lenke til kommentar
Kim T Skrevet 19. juni 2007 Forfatter Del Skrevet 19. juni 2007 (endret) Jøss så raskt svart. Jeg skal teste med engang og komme med tilbakemelding. Takk på forhånd... EDIT: Bør ikke jeg sortere etter dato_formatert? EDIT "Tilbakemelding": Det fungerte delvis. Problemet er at resten ikke dukker opp av bloggen. Det eneste som blir skrevet ut er datoene som forsåvidt er riktige. Men hva er det som tukler med de andre radene da? Kim Endret 19. juni 2007 av kimthoma Lenke til kommentar
Martin A. Skrevet 19. juni 2007 Del Skrevet 19. juni 2007 Med den spørringen henter du kun ut "dato_publisert". Du må selv spesifisere hvilke andre rader du vil hente. Eksempel: SELECT DATE_FORMAT(dato_publisert, '%d %M %y') as dato_formatert, rad1, rad2, rad3 FROM blogg WHERE dato_publisert <= now() AND ( dato_utgaar >= now() OR dato_utgaar = '0000-00-00' ) ORDER BY dato_publisert DESC, bloggid DESC rad1, rad2 og rad3 må endres til de andre du vil hente. Lenke til kommentar
Kim T Skrevet 19. juni 2007 Forfatter Del Skrevet 19. juni 2007 (endret) AHA. Tusen takk. Nå lærte jeg masse faktisk... Takker for hjelpen. Da er det bare å fortsette med det jeg holdt på med... EDIT "Poster løsningen også i klartekst(koder)": $sql = "SELECT DATE_FORMAT(dato_publisert, '%d.%M %y') as dato_formatert ,bloggid, tittel, ingress, bloggnyhet, url_info, nytt_vindu, bildenavn, dato_lagtinn, dato_utgaar FROM blogg WHERE dato_publisert <= now() AND ( dato_utgaar >= now() OR dato_utgaar = '0000-00-00' ) ORDER BY dato_formatert DESC, bloggid DESC"; Kim Endret 19. juni 2007 av kimthoma Lenke til kommentar
Crowly Skrevet 19. juni 2007 Del Skrevet 19. juni 2007 (endret) $sql = "SELECT * FROM blogg WHERE dato_publisert <= now() AND ( dato_utgaar >= now() OR dato_utgaar = '0000-00-00' ) ORDER BY dato_publisert DESC, bloggid DESC"; Bare ett lite tips om bruk av SELECT * FROM fra ett annet forum If you use "select * from" you are automatically using 2 queries. One for it to go find the names of all the columns and another to actually run the query in the form "select col1, col2, col3,... coln". Even if it involves you writing out every single column name, do it. It may take you a while to do, but you only need to do it once. Your MySQL server may need to do it many many times. Dette var i svar til denne problemstillingen som også kan være litt nyttig i denne sammenhengen I was hearing horror stories about people whose BlueHost accounts were suspended for 'CPU Overuse'. I contacted BH (because I was considering moving there) about this and they said the biggest killer of CPU was "SELECT * FROM". Løsningen har jo endret bruken av SELECT * i dette tilfellet, men hvis man skulle få lyst til å bruke det en annen gang, så kan det være greit å vurdere en ekstra gang om det virkelig er nødvendig Endret 19. juni 2007 av crowly Lenke til kommentar
Kim T Skrevet 19. juni 2007 Forfatter Del Skrevet 19. juni 2007 Nice to know. Det var jeg ikke klar over. Men skal tenke på det til nestegang nå sitter jeg og sliter med å kovertere over til "norsk". Ser at det er en MySQL "funksjon" for dette som heter LOCALTIME. Vet ikke om jeg er på riktig spor. Men jeg har iallefall ikke fått det til å fungere ennå. Kanskje jeg må kaste inn håndkleet etterhvert på dette også. Takker iallefall for alle svarene hittil. Jeg har iallefall lært noe idag. Kim Lenke til kommentar
Crowly Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Ett lite tillegg til posten min over, dette er ett svar til select * problematikken ... but that is just rubbish. Regardless of whether you select * or by column name, the db engine is going to have to first read the table definition to determine the order, data type and hence size of each column to determine its offset within a row. If you have variable length columns then these will have to be read individually to calculate the offset for the next column. You will only see real gains in efficiency if you are selecting just a few columns from the front of the record. If you want all columns then naming them will save nothing. Mr Hinman, the main reason your host sez that is because they are used to dealing with amateurs who have not normalised their data properly so they have needlessly wide tables and who use select * when they only need one or two columns. Such users are also likely to write queries within loops instead of learning how to use joins and where clauses. Siden jeg kun har holdt på med php i ca ett år, så er jeg nødt til å stole på hva andre brukere sider når jeg ikke vet selv Men bunnlinja blir uannsett at bruk kun SELECT * når du trenger alle feltene i tabellen, hvis du ikke trenger alle så navngi dem med SELECT felt1, felt2, felt3, ... , feltN FROM Lenke til kommentar
Kim T Skrevet 20. juni 2007 Forfatter Del Skrevet 20. juni 2007 Men fikk ikke spørringen min til å fungere med: SELECT DATE_FORMAT(dato_publisert, '%d.%M %y') as dato_formatert * FROM Jeg er og helt nybegynner innenfor dette feltet og hadde nok "trodd" på det som ble sagt der siden jeg ikke har noen form for bakgrunn til å uttale meg om slikt. Men med å navngi alle radene så gikk det fint. Kim Lenke til kommentar
Martin A. Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Jeg mener fortsatt at det å bruke SELECT * FROM er dårlig kodeskikk. Er ikke for ingenting at alle større prosjekter navngir alle radene selv om de skal hente alle. Lenke til kommentar
vidarlo Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Jeg mener fortsatt at det å bruke SELECT * FROM er dårlig kodeskikk.Er ikke for ingenting at alle større prosjekter navngir alle radene selv om de skal hente alle. 8903128[/snapback] Klart, men når han faktisk skal bruke alle kolonner ser eg ikkje det heilt store problemet. Det var uansett bare et kodeeksempel som var forenkla så mykje som mulig, og å hive på kolonnenavn er 10 sekunder Lenke til kommentar
Crowly Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Men fikk ikke spørringen min til å fungere med: SELECT DATE_FORMAT(dato_publisert, '%d.%M %y') as dato_formatert * FROM Jeg er og helt nybegynner innenfor dette feltet og hadde nok "trodd" på det som ble sagt der siden jeg ikke har noen form for bakgrunn til å uttale meg om slikt. Men med å navngi alle radene så gikk det fint. Kim 8902934[/snapback] du få fjerne * mellom dato_formatert og FROM. Lenke til kommentar
Kim T Skrevet 20. juni 2007 Forfatter Del Skrevet 20. juni 2007 (endret) Trodde det var "*" betydde at han skal hente ut "alt" Hva sier den da egentlig. Trodde jeg hadde lært noe her nå hehehe... EDIT: TESTET nå og det fungerte ikke. Får da bare frem datoene. Ingen nyhet. Kim Endret 20. juni 2007 av kimthoma Lenke til kommentar
Crowly Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 * betyr hent alt, men så vidt jeg vent kan du ikke blande den sammen med andre felt, du må fjerne stjerna og spesifisere alle de andre feltene du ønsker f.eks SELECT DATE_FORMAT(dato_publisert, '%d.%M %y') dato_formatert, felt1, felt2, felt3, felt4 FROM SELECT * FROM .... vil velge alle felt uten formatering osv, men når du trenger å gjøre noe "ekstra" med feltene som f.eks distinct, max, date_format osv så må du gjøre som i det første sql eksemplet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå