2017-07-01 2 views
0

Je suis en difficulté et j'ai besoin de votre aide.PHP implode pas ajouter toutes les valeurs de la base de données

La conversion d'un tableau en chaîne n'ajoute que les valeurs de la dernière ligne dans implode, pas toutes.

J'ont des valeurs suivantes dans la base de données MySQL

Nom de la table: Item1

ID  Value 
01  James,Jenny,Loreal 
02  Sunny,John,Razil 

maintenant je veux appeler les valeurs d'une autre table où les noms n'égal aux valeurs ci-dessus. J'ai utilisé ci-dessous requête.

$stmt= $db->prepare("Select * from Item1"); 
$stmt->execute(); 
while($row = $stmt->fetch(PDO::FETCH_BOTH)) 
{ 
    $mark=explode(',', $row['Value']); 
} 

$string_version = "'" . implode("','", $mark) . "'"; 

//in $string_version it only ads the 2nd row values not all rows values i need to add the all values which is in Values colunm 

$stmt = $db->prepare("Select * from item2 where names not in (".$string_version.") "); 
$stmt->execute(); 
while($row = $stmt->fetch(PDO::FETCH_BOTH)) 
{ 
echo $row['name']; 
} 

Résultat:

James 
Jenny 
Loreal 
Peter 

résultat attendu:

Peter 

Répondre

0

je suivrais un autre chemin (utiliser un tableau pour contenir tous les noms):

$stmt= $db->prepare("Select * from Item1"); 
$stmt->execute(); 
$names = []; 
while($row = $stmt->fetch(PDO::FETCH_BOTH)) 
{ 
    $mark=explode(',', $row['Value']); 
    foreach ($mark as $name) 
    $names[] = "'".$name."'"; 
} 

$stmt = $db->prepare("Select * from item2 where names not in (".implode(', ', $names).") "); 
$stmt->execute(); 
while($row = $stmt->fetch(PDO::FETCH_BOTH)) 
{ 
    echo $row['name']; 
} 

S'il vous plaît prenez garde cette méthode ne fonctionnerait pas si un nom contient un caractère apostrophe ('). Utilisez l'échappement pris en charge par votre couche de base de données.

+0

merci mon pote. tu es un génie. –

0

variables $mark est pas un tableau. C'est pourquoi seul "Razil" affecte cette variable.

Je pense que vous devez faire ceci:

while($row = $stmt->fetch(PDO::FETCH_BOTH)) 
{ 
    $mark[]=explode(',', $row['Value']); 
} 
+0

ya j'ai essayé cela, mais on n'a pas eu le résultat que j'attends –

+0

$ string_version comme déclarer un tableau puis utilisez pour boucle lors de la requête. –

0

Vous remplacez la variable $ mark à chaque fois que vous faites une boucle dans la table item1. Je suggère d'écrire la première requête avec group_concat.

select group_concat (séparateur Mycol « ») que les noms de Item1