2016-04-14 7 views
-4

У меня есть две таблицы, я хочу получить два значения таблицы, этот код должен работать нормально, но count = 2 означает, что цикл работает 2 раза, возвращает результат 2 раза, например count = 3 цикл работает в 3 раза возвращает результаты в 3 раза, что я сделал ошибку ....whilelopp не правильно при извлечении двух значений таблицы


OUTPUT

{ 
    "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 на линии
{ «статус»: «успех», "счета ": 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

это не сработает, потому что @yuvi имеет структуру данных один-ко-многим. объединение поможет в ситуации один к одному. – num8er

+0

@ num8er Join может использоваться в одном для многих – Wobbles

+0

Я знаю, но в этом ответе вы получите огромный ответ данных со всеми данными в одной строке. Это не оптимально. В большинстве фреймворков существует принцип нетерпеливой загрузки, когда модель получает связанные вещи. – num8er

0

Просто используйте внутреннее соединение, так что вам не придется перебирать сотрудник идентификаторами

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 на линии
{ "статус": "не found "," count ": null," data ": []} – yuvi

+0

Вы можете использовать mysql_error() для fin d ошибка. Я обновил свой ответ с проверкой ошибок, чтобы вы могли найти проблему. –