2013-06-13 3 views
2

J'ai besoin de compter le nombre de résultats pour la pagination.Mysql compte avec des requêtes internes imbriquées en condition IF

Demo Recherche

select A.order_id, 
     IF(
      E.assign_date IS NOT NULL AND E.assign_date != '0000-00-00', 
      DATE_FORMAT(E.assign_date , '%d-%b-%y'), 
      (select data from other tables with other conditions) 
     ) AS assign_date, 
     ....... 
     where 
     ..... 
     and assign_date > 2013-08-01 

Requête comte que je me sers

Select count(A.order_id) from order A, size B, production E ........... where ....... and assign_date > 2013-08-01 

je dois ajouter que si la condition que je puisse compter les résultats correctement

version plus longue

J'ai vérifié la question s posté sur SO, et ne pouvait pas trouver la réponse. Je travaille sur une page où je montre la pagination.

Pour la pagination, j'ai utilisé le compte, qui fonctionne. La requête de compte n'a pas cette condition.

Pour une requête réelle, je souhaite que je puisse poster toute ma requête ici, mais il est plus de 200 lignes si bien triés.

Pour la pagination, j'utilise la requête suivante.

$strQuery = "SELECT COUNT(DISTINCT(A.order_id)) AS totalRecs FROM $tbls WHERE $whereClause $WhereExt"; 

Le $tbls et $whereClause sont très longs.

Dans orders tableau I m ayant assing_on champ de date, ce qui montre qu'un ordre est attribué à quelqu'un pour la production. J'ai créé la page de liste de résultats à partir des données, et en PHP ajouté vérifier que si la date assign_on est vide/null. Si c'est le cas, je cours une autre requête pour obtenir la date de début estimée de la production.

La date de début prévue de la production obtient une date de nombre de calculs et paramètres

  1. date de livraison Orders.estimated (ce paramètre est réglé lors de la publication de l'ordre)
  2. mustReadyDate = date estimée - tampon d'expédition (une autre table) - séjours fournisseur (3 autres tables) - week-end de fournisseur (2 autres tableaux)
  3. totalDaysRequired pour la production = longueur totale de l'ordre/taux de tissage standard par jour (une autre table)
  4. muststartdate = mustReadyDate - totalDa ysRequired;

plus de quatre points sont tous dans la requête, aucun travail de PHP implique

requête est la récupération de données ayant cette condition et compter requête est de ne pas avoir cette condition pour le moment.

IF(
    E.assign_date IS NOT NULL AND E.assign_date != '$mysqlEmptyDate', 
    DATE_FORMAT(E.assign_date , '" . reporting_DateFormat . "'), 
    ($mustLoomStartDateQry_fm) 
) AS assign_date, 

je besoin d'ajouter une condition supplémentaire dans la clause WHERE de la requête de comptage pour vérifier si aasign_date > one week from today je veux juste savoir comment je peux ajouter une telle requête longue en partie de comptage donc j'exécuter que sur requête.

** EDIT **

Si quelqu'un est intéressé à observer la pleine requête http://pastebin.com/zqzbpEei mais s'il vous plaît je vous offre ce que pour vous donner un aperçu de la ...

+0

Pourquoi ne pas utiliser QUAND? –

+0

'Quand 'où? J'ai besoin de compter avec IF ELSE conditionné. –

+0

QUAND peut faire la même chose que IF ELSE et est la norme. –

Répondre

0

Si vous avez besoin Pagination donc s'il vous plaît essayer celui-ci .......

$Query="select * from table_name_here where colunm_name='content_which_you_find'"; 

par exemple

$Query="select * from android where type='Casual'"; 

si vous avez pas besoin si la condition s'il vous plaît enlever .... ..

comme $Query="select * from android";

exécuter maintenant au-dessus de cette requête en utilisant

$Result=mysql_query($Query); 

maintenant obtenir le nombre total de lignes sont sélectionnées en utilisant cette

$TotalRows=mysql_num_rows($Result); 

$onepage=9; 

changement ci-dessus 9 vous aimez combien vous voulez afficher les enregistrements dans une seule page

coller maintenant le code ci-dessous pour obtenir pagination

$d=($page-1)*$onepage; 
$SqlQuery="select * from android where type='Casual' order by id desc LIMIT $d, $onepage"; 
$ResultSql=mysql_query($SqlQuery) or die("error1?"); 

maintenant boucle mis à imprimer des données

while($row = mysql_fetch_array($ResultSql)) 
{ 
echo $row[1]; 
echo $row[2]; 
} 

maintenant mis ci-dessous le code

for($i=1;$i<=$np;$i++) 
{ 
echo "<a href='currnt_page_name_here.php?page=$i'> $i </a>"; 
} 

Essayer maintenant ce si une erreur me dire

+0

Désolé, vous manquez de lire ma question. Ma requête est d'avoir si les conditions, et dans si les conditions j'obtiens des données de différentes tables. Si je fais 'select * from ...' comme vous l'avez suggéré, le temps d'exécution de la requête est supérieur à 60 secondes pour seulement 50 enregistrements. –

Questions connexes