Php 链接SQL表-问题

Php 链接SQL表-问题,php,mysql,database,Php,Mysql,Database,我想将两个SQL表链接在一起,这两个表都有通过HTML/PHP表单输入的数据。 第一个表是用户将其所有详细信息输入表单(称为系统)的地方,第二个表是用户填写另一个预订表单(称为用户)的地方。如何将这些表链接在一起?显示用户的预订。 我不知道如何让预订表/表单将用户的用户名回显到第二个表中以将它们链接在一起? 我明白这是没有道理的,但我真的很感激一些帮助 以下是用于创建用户帐户的第一个表的SQL: 下面是创建预订的SQL: </form> </body> </html

我想将两个SQL表链接在一起,这两个表都有通过HTML/PHP表单输入的数据。 第一个表是用户将其所有详细信息输入表单(称为系统)的地方,第二个表是用户填写另一个预订表单(称为用户)的地方。如何将这些表链接在一起?显示用户的预订。 我不知道如何让预订表/表单将用户的用户名回显到第二个表中以将它们链接在一起? 我明白这是没有道理的,但我真的很感激一些帮助

以下是用于创建用户帐户的第一个表的SQL: 下面是创建预订的SQL:

</form>
</body>
</html> 

  <br></br>


    </div>
  </div>

</div>


</body>
</html>




下面是将用户为预订表单(系统表)输入的内容链接到SQL数据库的代码。

如果您只是尝试一起查询它们,则应该使用联接

SELECT users.user_first, users.user_last, users.user_email, system.* FROM system INNER users JOIN ON users.user_uid = system.user_uid
为了在系统表中存储用户uid值,您需要在表单中添加一个隐藏输入,如下所示:

<input type="hidden" name="uid" value="<?php echo $_SESSION['u_id']; ?>">
SELECT user_uid FROM details WHERE ID = @specificBookingID
并在运行insert查询时插入它

INSERT INTO system (date, time, table_layout, user_uid) VALUES ('$date', '$time', '$table_layout', '$user_uid');

只需确保您的表中确实有该列。一旦该值可用,您应该能够运行上面的连接查询。

让我们看看。您有两个表,一个包含用户数据(users),另一个包含预订数据(details)。“详细信息”行包含链接到该特定行的用户ID。 一旦您至少知道了预订的ID,您就可以像下面这样获得用户的ID:

<input type="hidden" name="uid" value="<?php echo $_SESSION['u_id']; ?>">
SELECT user_uid FROM details WHERE ID = @specificBookingID
知道用户id后,您可以获取用户数据:

SELECT * FROM users where user_uid = @retrievedUserID
您可以在一个查询中这样做:

SELECT * FROM users where user_uid IN (SELECT user_uid FROM details WHERE ID = @specificBookingID)
可以使用JOIN将两个表“链接”在一起。如果要列出带有一些用户信息的预订(详细信息表中的行),可以使用左外部联接或内部联接。(不同之处在于,使用LEFT OUTER JOIN可以获得所有预订,即使其中一些没有用户。使用INNER JOIN只能获得用户中存在相应行的预订。)

如果列在两个不同的表中具有相同的名称,则可以使用users.user\u uid和details.user\u uid来引用它们

SELECT details.*, user.email, user.first, user.last
FROM details LEFT OUTER JOIN user ON user.user_id = details.user_uid;
然后,您可能需要添加一个WHERE或orderby以及一个限制

在用户表中,有一个用户id(INT)和一个用户uid(VARCHAR)。详细信息表有一个用户uid(INT)。在本例中,我假设details表中的user_uid对应于users表中的user_id,因为它们都是INT。您可能需要更改某个列的名称以减少混淆。假设您想将users.user\uid重命名为“username”

此外,您应该在用户id和用户名上添加一个唯一索引,假设您希望两者都是唯一的。对于INT,我建议您使用自动递增的数字和用户名将其作为主键,只是一个唯一的键:

CREATE TABLE users (
  user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  ... ,
  username VARCHAR(20) NOT NULL UNIQUE,
  ...
);
在details表中,您可能还希望使用AUTO_INCREMENT将ID设置为主键


一个唯一的键可以保证没有重复项,并且可以有效地查找这些列。

Hello!这就是问题所在,细节中没有任何内容。user\u id,如何获取数据以将其输入?当用户被要求填写“详细信息”表格时,它不会要求用户输入他们的用户id,因此保留为空。我怎么填写?(希望这是有意义的?!)在表单中添加一个隐藏的用户ID值,我是回显还是?
@LucasDesouza非常感谢你,你真是太棒了,谢谢你解决了我一段时间以来遇到的问题!!!如果你追求计算,你会在这方面做得很好。他不知道如何将用户uid添加到详细信息表中,这样列为空,子查询将为空。问题是,一个用户可以在预订详细信息(详细信息表)中有多个数据,所以我不知道如何链接它,因为详细信息ID肯定会不断变化?一个用户可以“拥有”多个预订。这意味着“详细信息”中有多行将共享“user_uid”的相同值。@LucasDesouza我觉得他必须解决多个问题。不仅如此。但是,是的,这不仅仅是一个SQL问题。我觉得我已经回答了下一个问题@hello123将有这是非常重要的。我没有把它包括在答案中,因为我忍不住认为问题的根源更基本,比如理解问题和解决方案(除了了解sql)。问题在于细节中没有任何内容。user\u uid因为没有要求用户在表单中输入。在这种情况下,您必须首先插入用户,然后用户$mysqli->insert\u id从上次插入中获取id。这要求id是具有自动增量的主键。现在您有一个uid要插入到另一个表中。