Mysql sorgu tarihe göre sırayla olmaz

2 Cevap php

Ben randevu tarafından sipariş olmayacak olan, aşağıdaki sorgu ile şaşırıp. Ben yanlış ne yapıyorum herhangi bir yardım veya fikir çok takdir edilecektir. Sorgu thread_id tarafından bir giriş almak gerekiyordu, ve o ince yok çok bir forum sonrası olduğu gibi iplik yeni post, göstermek edilir. Ben yan tümcesi ORDER BY kullanarak yeni gelen eski sonuçları sipariş çalıştığınızda ancak, bunu göz ardı etmek gibi görünüyor.

$query = "SELECT * 
          FROM messages 
            WHERE (thread_id, received) 
             IN (SELECT thread_id, MAX(received) 
                 FROM messages 
                 WHERE receiver='$user' OR sender='$user' 
                   AND is_hidden_receiver!='1' 
                 GROUP BY thread_id) 
           ORDER BY received DESC";

Alkış, Lea

2 Cevap

Bir INT(11) sütuna eklenecek bir değer oluşturmak için time() function PHP kullanarak edilmiştir. Ben bu yanlış sıralarken neden olarak biraz mystified. Ben kısaca bunu açıklamak için nasıl anlamaya eğer ben bu cevabı güncelleyeceğiz.

Bu özellik, MySQL içine inşa edilmiş, TIMESTAMP sütun türüdür. Sen gerekir Muhtemelen read up on it a bit more Bu çözüm ile mutlu olmak önce. Bu tablo tanımlamak için nasıl bağlı olarak, bazı ilginç özelliklere sahiptir, türü bir sütun TIMESTAMP, bir yaratma damgası ya da bir değişiklik damgası olarak da hareket edebilir.

Gerçekten "aldı" göre sıralama değil, ya da beklediğinizden daha sadece farklı sonuçlar elde ettiğinizi sorun? Üzerinde operasyonların sırası olabilir nerede fıkra - eğer AND veya OR önceliklidir emin değilim. Belki bu değiştirmeyi deneyin:

receiver='$user' OR sender='$user' AND is_hidden_receiver!='1'

hangisi isteyen bunlardan birine:

(receiver='$user' OR sender='$user') AND is_hidden_receiver!='1'

receiver='$user' OR (sender='$user' AND is_hidden_receiver!='1')