Php whileloop在获取两个表值时不正确
我有两个表,我想获取两个表值,这段代码应该工作正常,但count=2表示循环运行2次,返回2次的输出,像count=3表示循环运行3次返回输出3次,我犯了什么错误Php whileloop在获取两个表值时不正确,php,php-5.5,Php,Php 5.5,我有两个表,我想获取两个表值,这段代码应该工作正常,但count=2表示循环运行2次,返回2次的输出,像count=3表示循环运行3次返回输出3次,我犯了什么错误 输出 相同的ans,但我会来两次,如何解决此问题 1)您必须使用第一次查询收集emp\u id 2) 然后通过执行WHERE IN() 3) 将所有任务收集到阵列 4) 您可以输出json\u encode一次,否则json无效 <?php session_start(); include('dbconfig.php');
输出 相同的ans,但我会来两次,如何解决此问题
1)您必须使用第一次查询收集emp\u id
2) 然后通过执行WHERE IN()
3) 将所有任务收集到阵列
4) 您可以输出json\u encode
一次,否则json无效
<?php
session_start();
include('dbconfig.php');
if(empty($_SESSION['email'])){
header('Location:login.php');
}
header('Content-Type: text/javascript; charset=utf8');
$dapartment = $_POST['department'];
$q = "SELECT * FROM task_employee WHERE emp_designation='".mysql_real_escape_string($dapartment)."'";
$q = mysql_query($q);
$taskEmployees = array();
while($taskEmployee = mysql_fetch_assoc($q)) {
$taskEmployees[$taskEmployee['emp_id']] = $taskEmployee;
}
$empIds = array_keys($taskEmployees);
$tasks = array();
if(!empty($empIds)) {
// this query tells mysql to return tasks of assigned users
$q = "SELECT * FROM task WHERE t_assign_to IN (".implode(',', $empIds).")";
$q = mysql_query($q) or die(mysql_error());
// generating array of tasks associated by emp_id (t_assign_to field)
while($task = mysql_fetch_assoc($q)) {
$tasks[] = array(
'task' => $task,
'task_employee' => $taskEmployees[$task['t_assign_to']]
);
}
}
echo json_encode(array(
'status' => (empty($empIds))? 'not found' : 'success',
'count' => sizeof($tasks),
'data' => $tasks
));
正如@Wobbles提到的那样。可以使用连接
session_start();
include('dbconfig.php');
if(empty($_SESSION['email'])){
header('Location:login.php');
}
$dapartment = $_POST['department'];
$q = mysql_query("SELECT * FROM task_employee te, task t WHERE te.emp_designation='$dapartment' AND te.emp_id = t.t_assign_to");
$data = array();
while($r = mysql_fetch_assoc($q)){
$data[] = $r;
}
$return = array(
'status' => ((empty($data))?'not found':'success'),
'count' => sizeof($data),
'data' => $data
);
header('Content-Type: text/javascript; charset=utf8');
echo json_encode($return);
有关更多信息,请查看,只需使用内部联接,就不必迭代员工id
SELECT *
FROM task_employee
INNER JOIN task
ON task_employee.emp_id=task.t_assign_to
ORDER BY task_employee.emp_id;
您不必使用联接。您可以在一个查询中从两个表中进行选择
<?php
session_start();
include('dbconfig.php');
if(empty($_SESSION['email'])){
header('Location:login.php');
}
$dapartment = mysql_real_escape_string($_POST['department']);
$sql = mysql_query("SELECT * FROM task_employee, task WHERE task_employee.emp_designation='$dapartment' AND task_employee.t_assign_to = task.emp_id");
if(false == $sql){
die('Invalid query: ' . mysql_error());
}
$count = mysql_num_rows($sql);
$data = [];
while($row=mysql_fetch_assoc($sql)){
$data[] = $row;
}
if (count($data) <= 0){
$return = array('status'=>'not found','count'=>$count,'data'=>$data);
}
else{
$return = array('status'=>'success','count'=>$count,'data'=>$data);
}
echo json_encode($return);
?>
您到底面临什么问题?为什么不在此处使用联接查询而不是嵌套循环?@TirthPatel您错了!有php5 mysqlnd扩展来保持对旧代码的支持。必须同意大多数应用程序中的此类代码不仅仅是PDO。@Wobbles告诉此解决方案,如何编写联接查询。请参阅task
表中的id
=>1个数据出现2次?获取类似警告的错误:mysql\u fetch\u assoc()希望参数1是资源,第20行的/home/srisanka/public_html/cupid/TV/php/department-check.php中给出的布尔值
{“status”:“success”,“count”:0,“data”:[]}只需复制并粘贴代码,但我仍然收到相同的错误未知列'AE098',其中的子句'AE098是emp_id或t_assign__è你没有告诉任何人你有varchar类型的emp_id。现在它被修复了。这不起作用,因为@yuvi有一对多的数据结构。join将在一对一的情况下提供帮助。我知道,但在这个答案中,您将得到一个巨大的数据响应,所有数据都在一行中。这不是最优的。在大多数框架中,当模型得到相关的东西时,有一个急切的加载原则。因为,在DB表中有超过1个数据,具有相同的ID@yuvi'My task Table总共有3行,所以您的代码将返回3行times@yuvi它将一次返回3行。
警告:mysql_num_rows()希望参数1是资源,第10行的/home/srisanka/public\u html/cupid/TV/php/department-check.php中给出的布尔值警告:mysql\u fetch\u assoc()期望参数1是资源,第12行的/home/srisanka/public\u html/cupid/TV/php/department-check.php中给出的布尔值
{“状态”:“未找到”,“计数”:null,“数据”:[]您可以使用mysql\u error()找出错误。我用错误检查更新了我的答案,以便您可以找到问题。
SELECT *
FROM task_employee
INNER JOIN task
ON task_employee.emp_id=task.t_assign_to
ORDER BY task_employee.emp_id;
<?php
session_start();
include('dbconfig.php');
if(empty($_SESSION['email'])){
header('Location:login.php');
}
$dapartment = mysql_real_escape_string($_POST['department']);
$sql = mysql_query("SELECT * FROM task_employee, task WHERE task_employee.emp_designation='$dapartment' AND task_employee.t_assign_to = task.emp_id");
if(false == $sql){
die('Invalid query: ' . mysql_error());
}
$count = mysql_num_rows($sql);
$data = [];
while($row=mysql_fetch_assoc($sql)){
$data[] = $row;
}
if (count($data) <= 0){
$return = array('status'=>'not found','count'=>$count,'data'=>$data);
}
else{
$return = array('status'=>'success','count'=>$count,'data'=>$data);
}
echo json_encode($return);
?>