2016-04-14 21 views
-4

我有兩個表,我想獲取兩個表值,這個代碼應該工作正常,但count = 2表示循環運行2次,返回2次的輸出,如count = 3循環3次運行返回輸出3次,我做了什麼錯....whilelopp獲取兩個表值時不正確


輸出

{ 
    "status":"success", 
    "count":2, 
    "data":[ 
     { 
     "id":"1", 
     "t_id":"STV1", 
     "t_title":"Horoscope Uploading", 
     "t_project":"1", 
     "t_sub_project":"Sub-project", 
     "t_desc":"cfdgdgdcf", 
     "t_priority":"Urgent", 
     "t_assign_to":"AE098", 
     "t_assign_on":"2016-04-13 12:03:49", 
     "t_started_on":"2016-04-14 05:30 PM", 
     "t_due_on":"2016-04-22 05:30 PM", 
     "t_complete_percentage":"100", 
     "t_est_hours":"35", 
     "t_worked":"10 Hours", 
     "t_comment":"dfhfghfgfsfhfgh", 
     "t_created_on":"2016-04-13 12:03:49", 
     "t_edited_on":"2016-04-14 07:01:06", 
     "t_status":"3", 
     "t_delete_on":"0" 
     } 
    ] 
}{ 
    "status":"success", 
    "count":2, 
    "data":[ 
     { 
     "id":"1", 
     "t_id":"STV1", 
     "t_title":"Horoscope Uploading", 
     "t_project":"1", 
     "t_sub_project":"Sub-project", 
     "t_desc":"cfdgdgdcf", 
     "t_priority":"Urgent", 
     "t_assign_to":"AE098", 
     "t_assign_on":"2016-04-13 12:03:49", 
     "t_started_on":"2016-04-14 05:30 PM", 
     "t_due_on":"2016-04-22 05:30 PM", 
     "t_complete_percentage":"100", 
     "t_est_hours":"35", 
     "t_worked":"10 Hours", 
     "t_comment":"dfhfghfgfsfhfgh", 
     "t_created_on":"2016-04-13 12:03:49", 
     "t_edited_on":"2016-04-14 07:01:06", 
     "t_status":"3", 
     "t_delete_on":"0" 
     } 
    ] 
} 

同答,但我會來兩次,如何解決這個問題

<?php 
 
\t session_start(); 
 
\t include('dbconfig.php'); 
 
\t if(empty($_SESSION['email'])){ 
 
\t header('Location:login.php'); 
 
\t } 
 
\t $dapartment = $_POST['department']; 
 
\t $sql = mysql_query("SELECT * FROM task_employee WHERE emp_designation='$dapartment'"); 
 
\t $count=mysql_num_rows($sql); 
 
\t $return = array(); 
 
\t while($r=mysql_fetch_assoc($sql)){ 
 
\t \t $emp_id=$r['emp_id']; 
 
\t \t if($count > 0){ 
 
\t \t $mysql = mysql_query("SELECT * FROM task WHERE t_assign_to='$emp_id'"); 
 
\t \t while($row= mysql_fetch_assoc($mysql)){ 
 
\t \t \t $data[] = $row; 
 
\t \t \t } 
 
\t \t \t $return=array('status'=>'success','count'=>$count,'data'=>$data); 
 
\t \t \t echo json_encode($return); 
 
\t \t }else{ 
 
\t \t \t $return=array('status'=>'not found','count'=>$count,'data'=>$data); 
 
\t \t \t echo json_encode($return); 
 
\t \t } 
 
\t } \t 
 
?>

+0

你到底面臨什麼問題? –

+1

爲什麼在這裏不使用連接的查詢而不是嵌套循環? – Wobbles

+2

@TirthPatel你錯了!有php5-mysqlnd擴展來支持舊代碼。必須同意這種類型的代碼在大多數應用程序中都超過了PDO。 – num8er

回答

0

1)您已經使用第一查詢收集emp_ids

2)然後做WHERE IN()

3)收集所有任務陣列

得到所有任務

4)您可以輸出json_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 
));  

在JS一樣(它是不合並字段名)你會使用它們:提到

for(var r in records) { 
    var record = records[r]; 
    console.log(record.task, record.taks_employee); 
} 
+0

得到像這樣的錯誤警告:mysql_fetch_assoc ()期望參數1是資源,布爾在中給出/home/srisanka/public_html/cupid/TV/php/department-check.php on line
{「status」:「success」,「count 「:0,」data「:[]} – yuvi

+0

已修復,請在我的回答中檢查更新 – num8er

+0

只需複製並粘貼您的代碼,但仍然會出現相同的錯誤 – yuvi

1

由於@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); 

欲瞭解更多信息,請對mysql-using-joins

+0

這不起作用,cuz @yuvi具有一對多的數據結構。加入將有助於一對一的情況。 – num8er

+0

@ num8er加入可用於一對多 – Wobbles

+0

我知道,但在這個答案中,您將得到一個巨大的數據響應與一行中的所有數據。這不是最佳的。在大多數框架中,當模型獲得相關的東西時,存在着急切的加載原則。 – num8er

0

一看就使用內部聯接,所以你不要有重複的員工ID的

SELECT * 
FROM task_employee 
INNER JOIN task 
ON task_employee.emp_id=task.t_assign_to 
ORDER BY task_employee.emp_id; 
+0

我的任務表總共3行是你的,所以你的代碼將返回3次 – yuvi

+0

@yuvi它會返回3行一次。 – Wobbles

0

您不必使用連接。您可以從一個查詢中的兩個表中進行選擇。

<?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); 
?> 
+0


警告:mysql_num_rows()預計參數1是資源,在布爾/home/srisanka/public_html/cupid/TV/php/department-check.php給定線

警告:mysql_fetch_assoc()預計參數1是資源,在布爾/home/srisanka/public_html/cupid/TV/php/department-check.php給定線
{ 「狀態」:「不找到「,」count「:null,」data「:[]} – yuvi

+0

您可以使用mysql_error() d錯誤。我通過錯誤檢查更新了我的答案,以便您可以找到問題。 –