【问题标题】:Correct Syntax on MySQL Table Joins?MySQL表连接的正确语法?
【发布时间】:2017-02-10 01:22:56
【问题描述】:

我有两个表要加入到一个新表中。我有一个“users”表、一个“tasks”表和一个空白的“user_tasks”表。我正在尝试将它们加入“user_tasks”表中。

这是我的桌子。

users = user_id, first_name, last_name
tasks = task_id, task_description
user_tasks = ut_id, ut_user_id, ut_first_name, ut_last_name, ut_task_id, ut_task_description.

这是我的 PHP 和 SQL 查询。我不确定出了什么问题。我得到一个未定义的索引。我需要在我的 HTML 表单上添加隐藏的输入吗?任何帮助将不胜感激。

<?php 

if(isset($_POST['submit'])){

    $user_id = $_POST['user_id'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];

    $task_id = $_POST['task_id'];
    $task_description = $_POST['task_description'];

    $ut_id = $_POST['ut_id'];
    $ut_user_id = $_POST['ut_user_id'];
    $ut_first_name = $_POST['ut_first_name'];
    $ut_last_name = $_POST['ut_last_name'];
    $ut_task_id = $_POST['ut_task_id'];
    $ut_task_description = $_POST['ut_task_description'];

    $join_query = "SELECT users.user_id, users.first_name, users.last_name, tasks.task_id, tasks.task_description FROM users, tasks INNER JOIN user_tasks ON users.user_id = user_tasks.ut_id INNER JOIN user_tasks ON tasks.task_id = user_tasks.ut_id INSERT INTO user_tasks (ut_user_id, ut_first_name, ut_last_name, ut_task_id, ut_task_description) VALUES ($user_id, $first_name, '$last_name', '$task_id', $task_description) WHERE ('$first_name' = '$ut_first_name', '$last_name' = '$ut_last_name', $task_id = $ut_task_id, '$task_description' = '$ut_task_description') ";

    $result = mysqli_query($connection, $join_query);      

}

?>

【问题讨论】:

  • 你想做什么?选择还是插入?您将两者混合在同一个查询中,但不能这样做。
  • 我正在尝试将任务分配给特定用户。我的表格工作得很好。但是数据没有填充到新表中。
  • 你必须提供更多关于你想要什么的细节。向我们展示示例数据和预期结果。
  • 好的,我可以做到。抱歉上次我发布的东西太长了,所以我试图简要介绍一下,但这是一个很长的问题。

标签: php mysql join


【解决方案1】:

我认为你选择的表('user,tasks')是错误的,可能是'user_tasks'

【讨论】:

  • 好的,很好。谢谢。我会仔细检查一下,看看它是否有效。
【解决方案2】:

您有两个串联的查询,选择 + 插入 ,试试这个:
1- 插入 + 选择单独:

           $join_query = "SELECT users.user_id, users.first_name,
           users.last_name, tasks.task_id,
           tasks.task_description FROM users
           INNER JOIN user_tasks ON users.user_id = user_tasks.ut_user_id 
/*users.user_id = user_tasks.ut_id*/
           INNER JOIN tasks ON task.task_id=user_task.ut_task_id";

           $result = mysqli_query($connection, $join_query); 

AND Insert After,Insert 不使用 where:

 $insert_query="INSERT INTO user_tasks (ut_user_id, ut_first_name,  ut_last_name,
                ut_task_id, ut_task_description) 
                VALUES ($user_id, '$first_name', '$last_name',
               '$task_id', '$task_description')";


mysqli_query($connection,$insert_query) or die(mysqli_error($connection));

2- 使用 SELECT 插入:

$query="INSERT INTO user_tasks (ut_user_id, ut_first_name,  ut_last_name,
                    ut_task_id, ut_task_description) 
SELECT users.user_id, users.first_name,
           users.last_name, tasks.task_id,
           tasks.task_description FROM users
           INNER JOIN user_tasks ON users.user_id = user_tasks.ut_user_id   /*users.user_id = user_tasks.ut_id*/
           INNER JOIN tasks ON task.task_id=user_task.ut_task_id";

       mysqli_query($connection,$query) or die(mysqli_error($connection));

【讨论】:

  • 好的,很好。那么我应该同时使用两者还是其中之一呢?
  • 视情况而定,第一个只会插入一条带有 POST 参数的记录,第二个会插入 select 返回的记录数。
  • 好的,谢谢。我会尝试它们,看看它们是否有效。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2013-07-29
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多