Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: DATE order by

latenleffahylly [27.04.2013 13:03:52]

#

Noniin.. hei taas kaikille. Minulla on iso ongelma, joka tuli yllättäen. Eli tapahtumat ovat taulussa ja yritän hakea niitä päivämäärän mukaan, mutta ei tietenkään onnistu.

Tapahtuma 2 | 2013-06-03
Tapahtuma 1 | 2013-05-19
Tapahtuma 3 | 2013-08-10

Eli Suomeksi pitäisi näyttää tältä:

Tapahtuma 1 | 19.5.2013
Tapahtuma 2 | 3.6.2013
Tapahtuma 3 | 10.8.2013

Haen tapahtumat päivämäärän mukaan. ORDER BY date ... hmm.. miten saisin koneen ymmärtämään että ensin katsoisi vuoden, sitten kuukauden ja sitten päivän suomalaisittain?

Grez [27.04.2013 14:37:40]

#

No jos sulla on ne missään järkevässä muodossa tietokannassa, niin kone katsoo automaattisesti ORDER BY:llä ensin vuoden jne.

Tietysti jos sulla on tietokannassa päivämäärät tekstimuodossa eli järjettömässä muodossa (ja vieläpä jossain muussa kuin ISO-standardin mukaisessa), niin tietenkin ne silloin myös sortataan tekstin sorttaussääntöjen mukaan.

Eli normaali ja ainoa järkevä tapa ja myös ongelmasi ratkaisu on käyttää tietokannassa datetime tms. tietomuotoa ja käyttäjälle näytettäessä muotoilla se käyttäjän lokaalin mukaiseen muotoon.

latenleffahylly [27.04.2013 14:55:19]

#

Muunnin kentän muotoon-> DATETIME (2013-05-19)

Mutta ei järjestys muuttunut, valitettavasti. Alla SQL-lause jolla haen tietoa:

$sql = "SELECT * FROM
(SELECT e_id, SUM($this->need.need) AS tarve
FROM $this->need
JOIN $this->group ON $this->need.g_id = $this->group.g_id
GROUP BY e_id) AS sql2
JOIN
(SELECT $this->event.*,
COUNT($this->booking.e_id) AS varaus
FROM $this->event
LEFT JOIN $this->booking ON e_id = $this->event.id
WHERE status = 1
GROUP BY id
ORDER BY date) AS sql1
ON sql1.id = sql2.e_id";

// Tulostaa:
// Tapahtuma	la 27.4.2013	10:00-17:00	Helsinki  10  5

Lisäys:

Luulen että vika täytyy olla omissa SQL-lauseissa, jotka ovat liian monimutkaisia. Esim. alla oleva tuo tapahtumat oikein:

// Palauta tulevat tapahtumat
public function get_upcoming_events() {
    $event_data = $this->wpdb->get_results($this->wpdb->prepare("SELECT * FROM $this->event WHERE status = 2"));
    return $event_data;
}

Lisäys: Osaatteko selittää miksi kaikki tulevat oikeassa järjestyksessä kun haen kaikki tapahtumat. Mutta kun osan, niin silloin sekaisin... Eli hain kaikki statukset 1,2,3 homma ok. Vain status 1 niin epäjärjestys. Sillä ei ollut merkitystä onko date vai datetime. Tapahtumat ovat kannassa sekaisin.

Lisäys:

---

Noniin.. en sitten tiedä kuinka fiksua tämä on mutta haen kaiken tapahtuma tiedon ja sitten status 1, 2, tai 3 laitan näkyviin. Tavallaan suorituskyvyn kannalta epäilyttävä, mutta muuten ihan ok. Nyt järjestyksessä, ja Grez kenttä on DATE

Grez [27.04.2013 17:59:47]

#

Laita se Order By ihan viimeksi kyselyssä. Nyt näyttäisi siltä että käytät order by:tä jossain sisäkyselyssä/temporary view:ssä ja sitten sekotat ne ulkokyselyssä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta