簡體   English   中英

如何用3表創建內部聯接

[英]How to create inner join with 3 table

mysql> SELECT * FROM main_table;
+--------+----------+--------+
| id_book | id_author      |description |
+--------+----------+--------+
| 1           | 101     |   I love cat |
+--------+----------+--------+

mysql> SELECT * FROM author;
+---------+-----------+
|  id_author | name_author |
+---------+-----------+
| 101     | Dr Sent     |
+---------+-----------+

mysql> SELECT * FROM book;
+--------+---------+
| id_book | name_book |
+--------+---------+
|      1 |     cat |
+--------+---------+

你好,我對PHP還是很陌生,現在與PHP和MySQL有點混淆了。 我有一個淹死列表,它與數據庫中的一個表相關。

首先,我的系統出現一個列出作者姓名的頁面,用戶可以選擇喜歡的用戶。

 JK ROWLING 
 DR SEUSS <-- author_name
 ROAD DAHL

接下來,它將進入一個新頁面並具有一個選擇(列表/菜單),其中顯示了書名列表。 我可以從數據庫中檢索下拉列表,但是我的問題是,當我在下拉列表中選擇“書名”之一時,它會顯示所有書的描述,而無法選擇正確的描述。

這是我的編碼,以使其更清楚

$currentPage = $_SERVER["PHP_SELF"];

mysql_select_db($database_config, $config);
$query_Recordset1 = "SELECT * FROM book ORDER BY name_book ASC";
$Recordset1 = mysql_query($query_Recordset1, $config) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$maxRows_Recordset2 = 1;
$pageNum_Recordset2 = 0;
if (isset($_GET['pageNum_Recordset2'])) {
  $pageNum_Recordset2 = $_GET['pageNum_Recordset2'];
}
$startRow_Recordset2 = $pageNum_Recordset2 * $maxRows_Recordset2;

$colname_Recordset2 = "-1";
if (isset($_GET['id_book'])) {
  $colname_Recordset2 = $_GET['id_book'];
}
mysql_select_db($database_config, $config);
$query_Recordset2 = sprintf("SELECT * FROM main_table WHERE id_book = %s ORDER BY description ASC", GetSQLValueString($colname_Recordset2, "int"));
$query_limit_Recordset2 = sprintf("%s LIMIT %d, %d", $query_Recordset2, $startRow_Recordset2, $maxRows_Recordset2);
$Recordset2 = mysql_query($query_limit_Recordset2, $config) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);

if (isset($_GET['totalRows_Recordset2'])) {
  $totalRows_Recordset2 = $_GET['totalRows_Recordset2'];
} else {
  $all_Recordset2 = mysql_query($query_Recordset2);
  $totalRows_Recordset2 = mysql_num_rows($all_Recordset2);
}
$totalPages_Recordset2 = ceil($totalRows_Recordset2/$maxRows_Recordset2)-1;

$queryString_Recordset2 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_Recordset2") == false && 
        stristr($param, "totalRows_Recordset2") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_Recordset2 = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_Recordset2 = sprintf("&totalRows_Recordset2=%d%s", $totalRows_Recordset2, $queryString_Recordset2);

嘗試這個.........

SELECT 
    a.*, b.*, c.* 
FROM main_table a 
    inner join author b on a.id_author = b.id_author 
    inner join book c on a.id_book = c.id_book

首先,我建議使用AJAX並在選擇一個項目時保持在同一頁面上。 這樣,您可以將不同輸入框的代碼分開,到最后看起來會更好。

要回答您的問題,以下是mySQL的SQL語句,您應該運行該命令以獲取所需的內容:

SELECT MAT.*,AUT.name_author, BOO.name_book
FROM main_table AS MAT, author AS AUT, book AS BOO
WHERE (MAT.id_book=BOO.id_book AND MAT.id_author=AUT.id_author) AND MAT.id_author=101
ORDER BY MAT.id_author, MAT.id_book;
您可以在此處找到上述人員的SQL Fiddle代碼。 您可以更新WHERE子句中的“過濾”以按另一個表的作者ID或書籍ID進行過濾

暫無
暫無

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

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