PHP: MYSQL QUERY Diurutkan Oleh

Tabel Gambar masukkan deskripsi gambar di sini

Halo saya punya tabel comments dan saya perlu mengambil tiga komentar terakhir tetapi dengan cara lain seperti ini:

8
9
10

Kode saya menunjukkan ini:

10
9
8

Kode:

$sql_query = $connection->query("SELECT * FROM comments WHERE `post_id` = '38' ORDER BY `id` DESC LIMIT 3");

while ($ff = $sql_query->fetch_array(MYSQLI_ASSOC)) {
    echo $ff["text"]. "</br>";
}

Terima kasih sebelumnya !


person GA ASD    schedule 26.12.2016    source sumber
comment
Bungkus pernyataan Anda dalam subkueri dan gunakan, dalam urutan menaik, berdasarkan ID komentar.   -  person Terry    schedule 27.12.2016
comment
Saya kira mengubah 'DESC' menjadi 'ASC' akan membuatnya berfungsi.   -  person Expressingx    schedule 27.12.2016
comment
@Terry tolong tunjukkan saya kodenya   -  person GA ASD    schedule 27.12.2016
comment
@Denisx tidak berfungsi   -  person GA ASD    schedule 27.12.2016
comment
ORDER BY text ASC jika ASC tidak berhasil dengan pemesanan paling lambat text, gunakan DESC   -  person Funk Forty Niner    schedule 27.12.2016
comment
@Fred-ii- dengan LIMIT 3 yang akan mengembalikan 1, 2 dan 3 atau 10, 9, 8 lagi. Ini memerlukan pembalikan subquery atau array hasil manual.   -  person sidyll    schedule 27.12.2016
comment
@sidyll Saya tidak mengerti mengapa ASC tidak berfungsi untuk mereka, seperti yang disarankan sebelumnya.   -  person Funk Forty Niner    schedule 27.12.2016
comment
@GAASD Anda memiliki jawaban di bawah, lihat itu.   -  person Funk Forty Niner    schedule 27.12.2016
comment
@Fred-ii- order by text akan kembali (1,2,...,10) dan dengan limit menjadi (1,2,3). Dengan desc, (10,9,...1) menjadi (10,9,8). Dia ingin (8,9,10). Masalahnya adalah, limit jarak dihitung dari awal set. Untuk menghitung dari akhir, diperlukan subquery.   -  person sidyll    schedule 27.12.2016
comment
@sidyll Terima kasih atas informasinya.   -  person Funk Forty Niner    schedule 27.12.2016
comment
@ Fred-ii- Terima kasih. Satu-satunya alternatif lain yang dapat saya pikirkan adalah menggunakan limit dengan offset, misalnya order by text limit 3 offset 7 akan berfungsi. Hal ini membuat saya berpikir apakah kita dapat membuat angka offset tersebut secara dinamis dengan subquery. Saya akan mengirimkan pertanyaan kepada pakar MySQL di sini.   -  person sidyll    schedule 27.12.2016
comment
@sidyll Lucu Anda harus menyebutkan tentang opsi offset LIMIT. Saya telah menulis komentar ke OP tentang hal itu tetapi menghapusnya. Seharusnya aku membiarkannya di tempatnya. Saya kira saya bisa meminta mod untuk membatalkan penghapusan tetapi merasa itu tidak sepadan.   -  person Funk Forty Niner    schedule 27.12.2016
comment
@ Fred-ii- Menarik. Dalam kasus khusus ini, menurut saya cara termudah adalah membalikkan set dengan PHP tetapi memang jika jumlah baris diketahui membatasi dengan offset adalah cara yang sangat bersih untuk melakukannya. Namun saya tidak tahu apakah mungkin untuk menghitung baris sebagai subkueri dan menggunakannya sebagai offset, semuanya dalam satu kueri. Baru saja memposting pertanyaan tentang itu.   -  person sidyll    schedule 27.12.2016
comment
@sidyll komentar yang sangat menarik di sana. Saya akan mengawasi pertanyaan Anda, cheers   -  person Funk Forty Niner    schedule 27.12.2016
comment
@GAASD keberatan memberi tahu saya mengapa Anda pergi dan menghapus pertanyaan yang kami bantu? stackoverflow.com/q/41371073/1415724 Saya sebaiknya melaporkannya ke moderator agar penghapusannya dibatalkan. Jelas bahwa kami menyelesaikannya untuk Anda. Itu tidak benar.   -  person Funk Forty Niner    schedule 29.12.2016


Jawaban (2)


Anda dapat melakukannya dengan subkueri, seperti yang dijelaskan dalam pertanyaan ini. Namun mungkin lebih mudah menggunakan array_reverse() PHP:

$rows = array_reverse($sql_query->fetch_all(MYSQLI_ASSOC));
foreach ($rows as $ff)
    echo $ff["text"]. "</br>";

Dengan subquery, jika Anda ingin:

SELECT * FROM (
  SELECT * FROM comments
  WHERE `post_id` = '38'
  ORDER BY `id` DESC LIMIT 3
) t ORDER BY t.id

Pada dasarnya ini membuat tabel turunan alias t dengan hasil kueri asli Anda, dan menyusun ulang kumpulan hasil terbatas ini.

person sidyll    schedule 26.12.2016
comment
Saya harus mengingatnya array_reverse(). Saya belum pernah menggunakannya sebelumnya tetapi mungkin di masa depan. - person Funk Forty Niner; 27.12.2016

Kueri berikut akan memberikan keluaran keinginan Anda

select * from (SELECT * FROM comments WHERE `post_id` = '38' ORDER BY `id` DESC LIMIT 3) temp order by id
person reza    schedule 26.12.2016