2016-04-22 54 views
0

我正在嘗試連接兩個表格,並且還通過我加入的表格中的某一列來排列查詢結果。在已加入表格上的ORDER BY

Call to a member function fetch_assoc() on boolean 

這裏是我完整的查詢:

SELECT * 
FROM course 
    JOIN cm ON (course = cm.course) 
WHERE title LIKE '%$searchTerm%' 
LIMIT $limit 
ORDER BY cm.num 

任何人有任何建議,直到我添加ORDER BY cm.num,在這一點上,我得到這個錯誤一切都很正常?

編輯:

的要求的完整代碼:

function getCourses($searchTerm) { 
    $mysqli = new mysqli('localhost', 'scott', 'tiger', 'courses'); 
    if ($mysqli->connect_errno) { 
     header("HTTP/1.1 500 Internal Server Error"); 
     die("Failed to connect to MySQL: {$mysqli->connect_error}"); 
    } 
    $mysqli->set_charset('utf8'); 

    $courses = []; 
    $limit = $searchTerm == '' ? 1000 : 10; 
    $res = $mysqli->query("SELECT * FROM course JOIN cm ON (course = cm.course) WHERE title LIKE '%$searchTerm%' ORDER BY cm.num LIMIT $limit"); 
    while($row = $res->fetch_assoc()) { 
     $course = new Course(
      $row['id'], 
      $row['title'], 
      $row['href'], 
      $row['level'], 
      $row['award'], 
      $row['summary'], 
      $row['dept'], 
      $row['subject'], 
      $row['overview'], 
      $row['wyl'], 
      $row['careers'] 
     ); 

     array_push($courses, $course); 
    } 

    return $courses; 
} 
+0

是'cm'是你的表名? – Saty

+0

當連接表最好在整個查詢中的每一列之前明確寫入表的名稱/別名。 – mitkosoft

+1

在表中是「表」還是「列」?關於你的表的外觀和他們命名的一般想法會有所幫助。 – apokryfos

回答

4

把限用命令後,指定的列專門

JOIN cm ON (course.course = cm.course)

SELECT * 
FROM course 
    JOIN cm ON (course.course = cm.course) 
WHERE title LIKE '%$searchTerm%' 
ORDER BY cm.num 
LIMIT $limit 
+0

不幸的是,我試過了,我仍然遇到同樣的問題。 – user3746428

+0

然後發佈您的完整代碼! – Saty

+0

你不認爲按領域加入工作'course'是表'JOIN cm ON(course = cm.course)'' – urfusion

1

你有在您的代碼中使用。當然是一張桌子,你想加入兩列。所以它應該像(course.itsColumn = cm.course)

讓我知道,如果這有幫助!

+0

我們真的不知道'course'只是一個表,或者'course'也是名爲'course'的表中的一列。這個問題很不明確。 – apokryfos

+1

@apokryfos我同意,雖然因爲這是他的TYPO,答案應該足夠幫助他注意到它,因此解決他的問題:) – Webeng

0

嘗試添加別名。建議連接中的每個表都通過別名引用。

SELECT * 
FROM course AS c 
    LEFT JOIN cm AS cm ON (c.course = cm.course) 
WHERE title LIKE '%$searchTerm%' 
LIMIT $limit 
ORDER BY cm.num 
+0

我有點困惑.. JOIN做到底是什麼?我知道什麼是INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN,但JOIN本身? – Webeng

+0

只需複製查詢並將別名放在那裏。你當然是對的。它應該是一個'LEFT JOIN'。 – cb0

+1

你真的可以在ORDER BY之前像MySQL這樣做LIMIT嗎? (其他產品有ORDER BY then LIMIT。) – jarlh

0

您在代碼中使用自加入。所以你可以用下面的代碼檢查:

SELECT * FROM course c 
JOIN course cm ON (c.course = cm.course) 
WHERE c.title LIKE '%$searchTerm%' 
ORDER BY cm.num LIMIT $limit