Bir soru-cevap sistemi üzerinde çalışıyorum. OOP mantığı ile götürüyorum.
Soruların listelendiği bir sayfam var. Sorular, en son eklenen, en beğenilen, en çok görüntülenen vs şeklinde farklı şekillerde sıralanabilecek.
Gerekli olan 4 tablomun adları questions, answers, categories, users.
Her tablonun gerekli olan sütünları;
questions
---q_id : Soru ID'si
---q_seo : Soru başlık seo hali
---q_title : Soru başlığı
---q_from : Soruyu soranın ID'si
---q_date : Sorulma tarihi
---q_category : Soru kategorisi
---q_date_unix : Soru tarihinin unix time formatındaki hali
categories
---c_id : Kategori ID
---c_seo : Kategori adı seo hali
---c_name : Kategori adı
users
---u_id : Kullanıcı ID
---u_username : Kullanıcı adı
---u_image : Kullanıcı imaj
answers
---a_id : Cevap ID
---a_question : Cevabın bağlı olduğu soru ID'si
Bu tablolar birbirlerine;
q_category & c_id
a_question & q_id
q_from & u_id
ile bağlılar.
Ben şu sorgu ile sorulara, soruların bağlı olduğu kategorilere, soruları soran kişilere tek sorgu ile erişebiliyorum. Hatta her soruya karşılık gelen cevap sayılarını da alabiliyorum.
SELECT questions.q_id, questions.q_seo, questions.q_title, questions.q_from, questions.q_date, questions.q_category, questions.q_date_unix, categories.c_id, categories.c_seo, categories.c_name, users.u_id, users.u_username, users.u_image, (SELECT COUNT(a_id) FROM answers WHERE a_question = questions.q_id) AS question_comment_count FROM questions LEFT JOIN categories ON questions.q_category = categories.c_id LEFT JOIN users ON questions.q_from = users.u_idBen bu sorguyu 2 farklı şekilde daha çalıştıracağım.
1. durum: 0 cevap sayısına sahip olan sorular
Cevap sayısı 0 olan yani hiç cevap almamış olan soruları almak istiyorum. Şu şekilde bir kullanım denedim;
SELECT questions.q_id, questions.q_seo, questions.q_title, questions.q_from, questions.q_date, questions.q_category, questions.q_date_unix, categories.c_id, categories.c_seo, categories.c_name, users.u_id, users.u_username, users.u_image, (SELECT COUNT(a_id) FROM answers WHERE a_question = questions.q_id) AS question_answer_count FROM questions LEFT JOIN categories ON questions.q_category = categories.c_id LEFT JOIN users ON questions.q_from = users.u_id WHERE question_answer_count=0Yani en sona WHERE question_answer_count=0 satırını ekledim. Şöyle bir hata aldım.
Unknown column 'question_answer_count' in 'where clause' in1. sorum: Sadece cevap sayısı 0 olan satırları nasıl alabilirim?
2. durum: Soruları cevap sayısına göre sıralamak istiyorum. Bunu nasıl sağlayabilirim. Yine kurabildiğim mantık şu şekilde.
SELECT questions.q_id, questions.q_seo, questions.q_title, questions.q_from, questions.q_date, questions.q_category, questions.q_date_unix, categories.c_id, categories.c_seo, categories.c_name, users.u_id, users.u_username, users.u_image, (SELECT COUNT(a_id) FROM answers WHERE a_question = questions.q_id) AS question_answer_count FROM questions LEFT JOIN categories ON questions.q_category = categories.c_id LEFT JOIN users ON questions.q_from = users.u_id ORDER BY question_answer_count ASCBu sorgu sorunsuz çalıştı. Bu durumda sormak istediğim şu.
2. sorum: Bu kullanım doğru bir kullanım mıdır?
Bu 2 konuda bana yardımcı olabilirseniz sevinirim. Şimdiden teşekkürler.