2010-05-11 1 views
0

ÉDITÉEToutes les fonctions de tableau ou une fonction définie par l'utilisateur uniquement pour prendre la première apparition de la valeur du tableau?

Je suis en utilisant cette requête select avec jointure gauche:

$updaterbk = "SELECT j1. * 
FROM jos_audittrail j1 
LEFT OUTER JOIN jos_audittrail j2 ON (j1.trackid != j2.trackid 
AND j1.field != j2.field 
AND j1.changedone < j2.changedone) 
WHERE j1.operation = 'UPDATE' 
AND j2.id IS NULL 
"; 

qui me sort un tableau:

Array 
(
    [0] => Array 
     (
      [id] => 137 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => 0 
      [newvalue] => 62 
      [field] => checked_out 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:28 
     ) 
    [1] => Array 
     (
      [id] => 138 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => 0000-00-00 00:00:00 
      [newvalue] => 2010-05-11 12:16:28 
      [field] => checked_out_time 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:28 
     ) 
    [2] => Array 
     (
      [id] => 139 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => Subhash 
      [newvalue] => Subhashgfhfgh 
      [field] => name 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:35 
     ) 
    [3] => Array 
     (
      [id] => 140 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => subhash 
      [newvalue] => subhashhfhf 
      [field] => alias 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:35 
     ) 
    [4] => Array 
     (
      [id] => 141 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => 62 
      [newvalue] => 0 
      [field] => checked_out 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:35 
     ) 
    [5] => Array 
     (
      [id] => 142 
      [trackid] => 153 
      [table_name] => jos_menu 
      [operation] => UPDATE 
      [oldvalue] => 2010-05-11 12:16:28 
      [newvalue] => 0000-00-00 00:00:00 
      [field] => checked_out_time 
      [live] => 0 
      [changedone] => 2010-05-11 17:46:35 
     ) 
) 

ici dans ce tableau, je ne veux pas toutes les valeurs à afficher deux fois, à savoir que je ned la première occurrence de la valeur seulement. Maintenant, vous pouvez voir que l'index "field" a des valeurs répétées, c'est-à-dire "checked_out" et "checked_out_time" d'autres index ont une occurrence unique, maintenant que dois-je faire pour sélectionner/saisir la première occurrence des valeurs répétitives seulement?

+0

C'est long, mais pas clair. Quel résultat attendez-vous, dans cet exemple? – blinry

Répondre

2

cela semble être le résultat d'une requête de base de données, donc je suggère de changer la requête pour ne sélectionner que des valeurs uniques field.

< MISE À JOUR > pour obtenir field uniques valeurs, vous pouvez essayer de grouper sur cette colonne:

SELECT j1.* 
FROM jos_audittrail j1 
    LEFT OUTER JOIN jos_audittrail j2 ON (
    j1.trackid != j2.trackid 
    AND j1.field != j2.field 
    AND j1.changedone < j2.changedone 
) 
WHERE j1.operation = 'UPDATE' 
    AND j2.id IS NULL 
GROUP BY j1.field 

vous pourriez avoir à ajouter toutes les autres colonnes à la GROUP BY SELECTIONNES, à savoir. GROUP BY j1.field, j1.id, j1.trackid, .... </UPDATE >

il serait utile si vous pouviez donner un peu plus de contexte: quel système utilisez-vous, qu'est-ce que vous essayez d'atteindre, les résultats attendus, la requête de base de données en cours d'exécution, etc. et: s'il vous plaît supprimer les touches entières et leurs valeurs ([6] => checked_out_time) à partir de votre sortie de débogage, car le ne pas ajouter de l'information ([field] => checked_out_time est le même, mais avec une touche plus significative).

+0

Pls chk la question mise à jour –

+0

s'il vous plaît vérifier la mise à jour réponse :) –

1

Quel type de sortie attendez-vous? Pouvez-vous donner un exemple de code avec ce que vous essayez d'accomplir?

La seule chose que je peux vous donner des informations fournies est que vous devez utiliser la fonction:

foreach($thatArray as $index => $subArray) 
if(($key = array_search('checked_out', $subArray))!==false) 
    return $key; 

C'est ce que je pense que vous voulez.

+0

Pls chk la question mise à jour –

Questions connexes