簡體   English   中英

如何對MySQL進行基於條件的查詢

[英]How to put condition based query for MySQL

我想創建一個論壇。

場景:
當用戶在論壇上單擊問題列表時,它將重定向頁面,在該頁面上他可以找到相應的問題和答案列表,

每當我使用下面提到的查詢時,我im_forum_question在新頁面的問題表( im_forum_question )中找到問題。

'SELECT q.id, q.forum_question, q.forum_question_point
 FROM im_forum_question as q '+
 WHERE q.id='+"'"+req.params.id+"' "

但是當我將上面的代碼與下面提到的答案獲取查詢混合時,我只會得到已經回答的問題。 對於未解決的問題,它顯示錯誤。

'SELECT  q.id, q.forum_question, q.forum_question_point,  qa.forum_answer, qa.user_name_answer
 FROM im_forum_question as q
   INNER JOIN im_forum_question_answer as qa
      ON qa.question_id = q.id
 WHERE q.id='+"'"+req.params.id+"' "

因為如果沒有人回答該問題,則該問題將不會存儲在答案表( im_forum_question_answer )中。

  1. 如果2號查詢(上述)失敗了,有什么辦法可以執行1號查詢(上述)。 (如果別的)
  2. 如果未找到答案,則僅顯示問題表。

     exports.get_question_answer = function(req, res, next){ db.sequelize.query( 'SELECT q.id, q.forum_question, q.forum_question_point, qa.forum_answer, qa.user_name_answer FROM im_forum_question as q '+ ' INNER JOIN im_forum_question_answer as qa ON qa.question_id = q.id '+ ' WHERE q.id='+"'"+req.params.id+"' " ).then(function(data){ console.log('Logs for Data', data); var arr = data[0]; res.render('forum/question.ejs',{ success:'', error:'', session: req.session.user, data:arr }) }) } 

快速瀏覽后,我認為您沒有得到答案的原因是因為您使用了INNER JOIN 內部聯接僅返回兩個表中共有的行,因此,在答案表中找不到特定的ID時,將在返回的表中完全跳過該行(有關聯接的詳細說明,請參見此處 )。

要實現您想要的目標,您應該改用LEFT JOIN 這將從左側表(在本例中為您的問題表)中返回所有匹配的記錄。 對於找不到匹配答案的情況,條目將為空。

您可以修復的第二件事是您遇到的錯誤。 這很可能是由於您要返回

var arr = data[0];

但是,在數組為空的情況下,它將是不確定的。 如果您在代碼中不考慮這一點,可能會導致錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM