2010-04-28 5 views
0

Comment obtenir la ligne suivante de la table de base de données? De telle sorte que la ligne pourrait être incrémentée ligne qui est si la structure a un champ appelé "id" alors la ligne peut être id ++ ou très incrémentée prochaine rangée, mais il peut aussi b tout autre id contenant la ligne (NOT VERY NEXT), (parce que le les identifiants peuvent être supprimés de la table).Comment obtenir la ligne suivante à partir de la table de base de données?

J'utilise Mysql Database ci-dessous est mon code ..

mysql_select_db('pranav_test'); 
$seletaudit = mysql_query("SELECT * FROM jos_audittrail WHERE live = 0"); 
while($row2 = mysql_fetch_array($seletaudit)) 
{ 
    $audit[] =$row2; 
} 
$trackid = array(); 
$tracktable = array(); 
$i = 0; 
foreach($audit as $val) 
{ 
    $trackid[$i] = $val['trackid']; 
    $tracktable[$i] = $val['table_name']; 

    if($i!=0) 
    { 
     $prev_id = $trackid[$i-1]; 
     $prev_valtab = $tracktable[$i-1]; 
    } 
    if($val['operation'] == 'INSERT') 
    { 
     if($tracktable[$i]!=$prev_valtab) 
     { 
      $inserttable = "INSERT INTO '".$tracktable[$i]."' ("; 
     } 


     if($tracktable[$i]==$prev_valtab) 
     { 
      $insertfield .= "'".$val['field']."', "; 
     } 
     if($tracktable[$i]==$prev_valtab) 
     { 
      $insertfield .= "]"; 
      $insertfield = str_replace(", ]",")",$insertfield); 

     } 
    } 
} 

ci-dessus je besoin sais ce qui est va être mon prochain champ « nom_table » de lignes contiennent ... comment puis-je faire ....? Aidez-nous à récupérer la ligne suivante dans la boucle for pour la vérifier.

+0

Pouvez-vous fournir du code? Quelle base de données utilisez-vous? Quelles fonctions/objets utilisez-vous pour vous y connecter? –

Répondre

1

MISE À JOUR:

Ok, maintenant que vous avez publié un code, voici une réponse plus précise:

Si vous voulez avoir accès à la ligne suivante dans le tableau, je vous suggère d'utiliser un boucle normale for d'avoir accès à l'index:

for($i = 0; $i<count($audit); $i++) { 
    // $audit[$i] is current row 
    // $audit[$i+1] is next row 
} 

Mais soyez prudent lorsque vous atteignez la fin du tableau, comme $i+1 sera hors limites.

Ou si on se demande pourquoi le $i dans votre code actuel ne se comporte pas correctement: Vous devez augmenter à la fin de la boucle foreach:

$i++; 

MAJ2:
Plus compléter l'exemple pour le rendre clair (j'adapte votre approche et vérifie le précédent rangée)

for($i=0; $i<count($audit);$i++) 
{ 
    $curr = $audit[$i]; 

    if($i>0) { 
     $prev = $audit[$i-1]; 

     if($curr['operation'] == 'INSERT') 
     { 
      if($curr['table_name']!=$prev['table_name']) 
      { 
       $inserttable = "INSERT INTO '".$curr['table_name]."' ("; 
      } 
      else { 
       // whereever $insertfield comes from 
       $insertfield .= "'".$curr['field']."', "; 
       $insertfield .= "]"; 
       $insertfield = str_replace(", ]",")",$insertfield); 

      } 
     } 
    } 
} 

Comme vous ne l'avez pas spécifié du tout comment vous connecter à la base de données, voici une réponse générique:

Précisez votre requête à l'ordre du résultat fixé par ID:

$query = "SELECT <columns here> FROM <table here> ORDER BY id"; 

obtenir ensuite le jeu de résultats (nous avons une classe de base de données fictive):

$result = $db->query($query); 

Puis itérer sur ResultSet:

while($row = $result->next()) { 
    // do something with row 
} 
+0

Pls chk la question de mise à jour .. que dites-vous à ce sujet ??? –

+0

@Parth: Ma réponse est toujours valide (la première partie;)) Mais je l'ai mis à jour quand même ... –

+0

Aucun Felix U ne m'a toujours pas eu raison, ou encore je ne suis pas au point, quoi qu'il puisse être, ici je veux dire que dans la boucle ci-dessus j'ai besoin de la valeur d'une colonne pour la rangée suivante seulement, pour chaque itération ... –