2016-04-14 2 views
-4

J'ai deux table, je veux aller chercher deux valeurs de table, ce code devrait fonctionner bien mais compter = 2 signifie boucle exécutant 2 fois, retourner la sortie de 2 fois, comme count = 3 moyens boucle en cours d'exécution en 3 fois revenir 3 fois sortie, ce que je faisais erreur ....whilelopp pas correctement lors de l'extraction de deux valeurs de table


sORTIE

{ 
    "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" 
     } 
    ] 
} 

même ans mais je viendrai deux fois, comment résoudre ce problème

<?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

À quel problème faites-vous exactement face? –

+1

Pourquoi n'utilisez-vous pas une requête jointe ici à la place des boucles imbriquées? – Wobbles

+2

@TirthPatel Vous avez tort! Il y a une extension php5-mysqlnd pour garder le support de l'ancien code. Doit accepter que ces types de code dans la plupart des applications sont plus que PDO. – num8er

Répondre

0

1) Vous avez à recueillir emp_ids en utilisant la première requête

2) Ensuite, obtenir toutes les tâches en faisant WHERE IN()

3) Ramassez toutes les tâches à un tableau

4) Vous pouvez sortir json_encode une fois, sinon Youson est invalide

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

Dans JS Vous allez les utiliser comme (il est pour ne pas fusionner les noms de champs):

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

Obtenir une erreur comme ceci Avertissement: mysql_fetch_assoc() 1 paramètre attend à être ressource, booléenne donnée dans /home/srisanka/public_html/cupid/TV/php/department-check.php en ligne
{ "status": "succès", "count ": 0," données ": []} – yuvi

+0

fixe, vérifier les mises à jour dans ma réponse – num8er

+0

il suffit de copier et coller votre code mais toujours je reçois la même erreur – yuvi

1

Comme mentionné @Wobbles. Vous pouvez utiliser des jointures.

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); 

Pour plus d'informations, s'il vous plaît un coup d'oeil sur mysql-using-joins

+0

cela ne fonctionnera pas, cuz @ yuvi a une structure de données un-à-plusieurs. rejoindre aidera dans la situation one-to-one. – num8er

+0

@ num8er Join peut être utilisé dans un à plusieurs – Wobbles

+0

Je sais, mais dans cette réponse, vous obtiendrez une énorme réponse de données avec toutes les données dans une rangée. Ce n'est pas optimal. Dans la plupart des cadres, il y a un principe d'empressement quand le Modèle reçoit des choses liées. – num8er

0

Il suffit d'utiliser une jointure interne de sorte que vous n'avez pas à itérer id de

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

Ma table de tâches totalement 3 lignes sont là votre si votre code il sera retourner 3 fois – yuvi

+0

@yuvi Il reviendra 3 lignes une fois. – Wobbles

0
des employés

Vous ne devez pas utiliser une jointure. Vous pouvez choisir parmi deux tables dans une requête.

<?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


Attention: mysql_num_rows() attend le paramètre 1 pour être ressource, boolean donnée dans /home/srisanka/public_html/cupid/TV/php/department-check.php en ligne

Avertissement: mysql_fetch_assoc() attend le paramètre 1 pour être ressource, booléenne donnée dans /home/srisanka/public_html/cupid/TV/php/department-check.php en ligne
{ "status": "pas found "," count ": null," data ": []} – yuvi

+0

Vous pouvez utiliser mysql_error() pour fin d l'erreur. J'ai mis à jour ma réponse avec la vérification d'erreur afin que vous puissiez trouver le problème. –