当前位置: 首页 > 知识库问答 >
问题:

使用外键关系的Sql查询

冯宏放
2023-03-14

我做了一个图书馆管理系统。我正试图打印学生问题书,但SQL查询遇到了问题。下面是用户。用于打印发行书籍的php代码。我也上传了数据库,方便大家参考。请帮忙。

使用者php

<?php
session_start();
$username = $_SESSION['var'];
include ("connection.php");
?>
<html>
<head>
<title>User </title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
</head>
<body>
<?php echo "<h2>" . $username . "</h2>";
?>
<table class="w3-table-all w3-card-4">
<tr>
    <th>Book Name </th>
  <th>Issue Date</th>
  <th>Submit Date</th>
</tr>
    <?php
        $query="select isbn, issuedt, submitdt from passbook INNER JOIN usertable on usertable.username='$username' where passbook.id=(usertable.username= '$username') ";
        $result= mysqli_query($sql, $query);
        while($row=$result-> fetch_assoc())
        {
            echo "<tr><td>". $row["isbn"]. "</td><td>". $row["issuedt"]. "</td><td>". $row["submitdt"]."</td><tr>";
        }
        echo "</table>";              
    ?>

</table>
</body>
</html>

以下是图书馆管理系统的数据库。

-- phpMyAdmin SQL Dump
-- version 4.7.9
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Apr 29, 2018 at 03:31 PM
-- Server version: 10.1.31-MariaDB
-- PHP Version: 7.2.3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `library`
--
CREATE DATABASE IF NOT EXISTS `library` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `library`;

-- --------------------------------------------------------

--
-- Table structure for table `book`
--

CREATE TABLE `book` (
  `isbn` varchar(13) NOT NULL,
  `bookname` varchar(30) NOT NULL,
  `author` varchar(30) NOT NULL,
  `bookid` int(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- RELATIONSHIPS FOR TABLE `book`:
--   `bookid`
--       `type` -> `bookid_type`
--

--
-- Dumping data for table `book`
--

INSERT INTO `book` (`isbn`, `bookname`, `author`, `bookid`) VALUES
('100', 'harry potter', 'j k rowling', 1);

-- --------------------------------------------------------

--
-- Table structure for table `passbook`
--

CREATE TABLE `passbook` (
  `pid` int(200) NOT NULL,
  `user_id` int(200) NOT NULL,
  `isbn` varchar(13) NOT NULL,
  `issuedt` date NOT NULL,
  `submitdt` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- RELATIONSHIPS FOR TABLE `passbook`:
--   `user_id`
--       `usertable` -> `id`
--   `isbn`
--       `book` -> `isbn`
--

--
-- Dumping data for table `passbook`
--

INSERT INTO `passbook` (`pid`, `user_id`, `isbn`, `issuedt`, `submitdt`) VALUES
(2, 0, '100', '2018-04-04', '2018-04-26');

-- --------------------------------------------------------

--
-- Table structure for table `type`
--

 CREATE TABLE `type` (
 `bookid_type` int(30) NOT NULL,
  `name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
 -- RELATIONSHIPS FOR TABLE `type`:
--

--
-- Dumping data for table `type`
--

INSERT INTO `type` (`bookid_type`, `name`) VALUES
(1, 'Magic');

 -- --------------------------------------------------------

 --
-- Table structure for table `usertable`
--

CREATE TABLE `usertable` (
  `id` int(200) NOT NULL,
  `name` varchar(30) NOT NULL,
  `username` varchar(30) NOT NULL,
  `password` varchar(10) NOT NULL,
  `dateofbirth` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- RELATIONSHIPS FOR TABLE `usertable`:
--

--
-- Dumping data for table `usertable`
--

INSERT INTO `usertable` (`id`, `name`, `username`, `password`, `dateofbirth`) VALUES
(0, 'Priyanka', 'priyanka', 'priyanka', '2018-03-04'),
(1, 'puru', 'puru', 'puru', '2018-03-05');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `book`
--
ALTER TABLE `book`
  ADD PRIMARY KEY (`isbn`),
  ADD UNIQUE KEY `bookid` (`bookid`);

--
-- Indexes for table `passbook`
--
ALTER TABLE `passbook`
  ADD PRIMARY KEY (`pid`),
  ADD UNIQUE KEY `isbn_number` (`isbn`),
  ADD KEY `user_id` (`user_id`);

--
-- Indexes for table `type`
--
ALTER TABLE `type`
  ADD PRIMARY KEY (`bookid_type`);

--
-- Indexes for table `usertable`
--
 ALTER TABLE `usertable`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `passbook`
--
ALTER TABLE `passbook`
  MODIFY `pid` int(200) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `book`
--
ALTER TABLE `book`
  ADD CONSTRAINT `book_ibfk_1` FOREIGN KEY (`bookid`) REFERENCES `type` 
 (`bookid_type`) ON UPDATE CASCADE;

--
-- Constraints for table `passbook`
--
ALTER TABLE `passbook`
  ADD CONSTRAINT `passbook_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES 
`usertable` (`id`) ON UPDATE CASCADE,
  ADD CONSTRAINT `passbook_ibfk_2` FOREIGN KEY (`isbn`) REFERENCES `book` 
(`isbn`) ON DELETE CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

数据库是这样关联的:-usertable将id作为主键。Book将isbn作为主键,bookid作为外键。类型将bookid作为主键。存折的外键为isbn,主键为uid。我想显示存折,其中会显示存折名称以及发行日期和提交日期。因此,我必须从两个不同的表中获取两个数据,使用isbn号从boo表中获取图书名称,并从usertable中获取用户ID,我必须对passbook表运行userid以查找相关条目。

共有1个答案

步兴德
2023-03-14

你的查询应该更像是...

$query="select passbook.isbn, issuedt, submitdt, bookname
    from passbook 
    INNER JOIN usertable on usertable.id=passbook.user_id 
    INNER JOIN book on passbook.isbn = book.isbn
    where usertable.username= '$username' ";

这将存折上的user_id链接到usertable id,并在where子句中选择要限制的用户。

添加到books表的链接意味着将passbook isbn链接到book isbn字段。需要记住的一点是,isbn位于两个被选择的表上,因此请记住将其添加到所选字段中(我使用了passbook中的一个,尽管它们都是相同的)。

(虽然您应该使用准备好的语句来选择bu用户名。)

 类似资料:
  • 问题内容: 对于SQL Server 2000_ 对于给定的表“ foo”,我需要一个查询来生成一组表,这些表具有指向foo的外键。 问题答案: SELECT o2.name FROM sysobjects o INNER JOIN sysforeignkeys fk on o.id = fk.rkeyid INNER JOIN sysobjects o2 on fk.fkeyid = o2.id

  • null null 表名: ISBN->外键 authorid->外键 既然Linq-to-SQL会根据外键关系自动创建属性,为什么下面的代码块不会触发智能感知呢?对我来说不是... 它不允许我添加照片,但“author”与AuthorISBN有“一对多”关系,“titles”也与AuthorISBN有“一对多”关系 代码:

  • 我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。 以这三个基本表格为例: 表用户 user_id|user_email|user_firstname|user_lastname|... 表雇员 user_id|employee_staff_number|... 表管理 user_id|adm

  • 有人能帮我学习SQL吗?我正在使用Oracle SQL*plus 创建以下表。 表: stdNo CHAR(5)这是主键 表

  • 问题内容: 问题 我需要更好地了解有关何时可以在子查询中引用外部表以及何时(以及为什么)不适当的请求的规则。我在尝试重构的Oracle SQL查询中发现一个重复项,但是当我尝试将引用的表转换为分组的subQuery时遇到了问题。 以下语句可以正常工作: 不幸的是table2有时会有重复的记录,因此在将t2加入t1之前,我需要先对其进行汇总。但是,当我尝试将其包装在子查询中以完成此操作时,SQL引擎

  • 问题内容: 我是RestKit的新手,正在挣扎。 JSON: 核心数据: 我的应用程序逻辑如下所示: 我一生都无法解决如何使RestKit填充用户对象的团队Property的问题。 我看过这么多帖子,但是我没有尝试,这不是通常的用例吗? 有谁知道该怎么做,帮助将不胜感激! 谢谢。 问题答案: 您需要向持有关联的实体添加一个临时属性。这需要添加到您的中。 然后,您需要为您添加一个关系定义: 这将为R