2014-09-17 4 views
1

J'ai besoin d'une requête SQL qui affiche tous les enregistrements si elle est également dupliquée. Par exemple direMysql afficher tous les enregistrements

select * from table where true and p_id in(1,2,1,1) 

affiche seulement les enregistrements de 1 et 2 mais j'ai besoin qu'il soit répété lorsqu'il est donné en boucle while.

Mise à jour avec le code:

$cook = unserialize($_COOKIE["pro_cook"]); 
foreach ($cook as $something) { 
    $merc[] = $something; 
} 
foreach ($size as $new_size) { 
    $size_array[] = $new_size; 
} 

$items = count($merc); 
$mer = rtrim(implode(',', array_reverse($merc)), ','); 
$fulclr = "and p_id in (".$mer.")"; 
$asd = "(p_id,".$mer.")"; 
$result = mysql_query("select * from product_details where true ".$fulclr." order by field".$asd.""); 
+0

S'il vous plaît écrire un code que vous avez essayé d'atteindre cet – Vidhi

+0

Je pense que nous allons avoir besoin de plus d'informations. Pouvez-vous montrer le code que vous avez actuellement? – LeonardChallis

+1

Je dirais que vous ne pouvez pas le faire sans UNION ou JOIN avec la même table - et faire cela dynamiquement basé sur les identifiants que vous passez à la clause in est pratiquement impossible. Je vous suggère d'essayer de le résoudre en code plutôt que dans la requête. –

Répondre

1

Espérons que cela aidera

$ids = "1,2,1,1"; 

$sql = "select * from table where true and p_id in (".$ids.")"; 
$rec = mysql_query($sql); 

$dbData = array(); 
while($res = mysql_fetch_assoc($rec)) { 
    $dbData[$res['p_id']] = $res; 
} 

$ids = explode(',', $ids); 

$newArray = array(); 
foreach ($ids as $id) { 
    if (!empty($dbData[$id])) { 
     $newArray[] = $dbData[$id]; 
    } 
} 
+0

je pense qu'il n'y a pas de différence entre p_id IN (1,2) et p_id IN (1,2,1,1) par mysql donc je ne comprends pas votre point. s'il y a plusieurs lignes dans db qui a la valeur 1 ou 2, il les obtiendra toutes avec p_id IN (1,2) c'est assez –

+0

le 'p_id' supposé contenir les mêmes valeurs ou différent? –

+0

disons que notre table a 5 lignes et si deux d'entre elles sont p_id = 1 et l'une d'elles p_id = 2 dans ce cas "p_id IN (1,2)" version retournera 3 lignes. –

Questions connexes