2016-03-24 6 views
0

Okie dokie. Посмотрим, смогу ли я объяснить себя правильно. В двух отдельных строках моей базы данных, у меня есть данные, что выглядит следующим образом:Как удалить определенную часть массива?

row1 (labeled "claimed") = Item1, Item2, Item3, Item4 
row2 (labeled ctype) = Thing1, Thing2, Thing3, Thing4 

Я задрал данные, чтобы они группироваться вместе, как так:

Item1, Thing1 
Item2, Thing2... 

, используя этот код:

<?php 
$select=mysqli_query($connect, "SELECT * FROM `$table_members` WHERE email='$_SESSION[USR_LOGIN]'"); 
while($row1=mysqli_fetch_assoc($select)) { 
    $name1=$row1['name']; 
    $claim = $row1['claimed']; 
    $type1 = $row1['ctype']; 
    if ($claim != 'None') { 
     $type2 = explode(', ', $type1); 
     $decks = explode(', ', $claim); 
     echo "<table id=\"memtable\"><tr><th>Name</th><th>Claimed</th><th>Type</th></tr>"; 
     foreach(array_combine($decks, $type2) as $deck => $type3){ 
      echo "<tr><td>"; 
      echo "$name1</td><td>"; 
      echo "$deck</td><td>"; 
      echo "$type3</td><td>"; 
     } 
    } 
} 
?> 

Проблема в том, что после того, как участник отправит форму, я хочу УДАЛИТЬ пункт и вещь из базы данных на основе их представления. Так, например, у меня есть раскрывающийся список

-Item1 
-Item2... 

Они выбирают Item2 и представляют форму. Теперь я только хочу, чтобы удалить ITEM2 и Thing2 из моей базы данных, так что теперь строки будут выглядеть следующим образом:

row1 (labeled "claimed") = Item1, Item3, Item4 
row2 (labeled ctype) = Thing1, Thing3, Thing4 

Я не могу показаться, чтобы выяснить, как код так, что только один конкретный экземпляр будет удален , Я предполагаю, что это что-то вроде следующего:

foreach(array_combine($decks, $type2) as $deck => $type3){ 
$gone = "DELETE FROM `$table_members` WHERE claimed='$deck' AND ctype='$type3'"; 
      mysqli_query($connect, $gone); 
} 

ETA: Я нашел решение! Для тех, кто ищет тот же тип вещей, вот что я сделал:

$remove = $_POST['remove;'] 

$select1=mysqli_query($connect, "SELECT * FROM `$table_members` WHERE email='$_SESSION[USR_LOGIN]'"); 
while($row1=mysqli_fetch_assoc($select1)) { 
    $claim = $row1['claimed']; 
    $type1 = $row1['ctype']; 
} 
$type2 = explode(', ', $type1); 
$decks = explode(', ', $claim); 
for($i=0;$i<count($decks);$i++){ 
    if($decks[$i]===$remove){unset($decks[$i]); unset($type2[$i]);} 
} 
$decks = implode(', ',$decks); 
$type2 = implode(', ',$type2); 
$gone = "UPDATE `$table_members` set claimed='$decks', ctype='$type2' where email='$_SESSION[USR_LOGIN]'"; 
    mysqli_query($connect, $gone); 
+0

Вы действительно хотите нормализовать свои данные. –

+0

Извините, я действительно не знал, как еще объяснить это. –

ответ

0

Давайте посмотрим, правильно ли я понял ваш сценарий.

Данные в таблице выглядит примерно так:

------------------------------------------------------------------------- 
| Name | ctype       | claimed     | 
-------------------------------------------------------------------------- 
| Jhon | Thing1, Thing2, Thing3, Thing4 | Item1, Item2, Item3, Item4 | 
------------------------------------------------------------------------- 

В том случае, если вы просто хотите удалить один пункт в то время, я думаю, что лучшим вариантом будет:

$email = $_SESSION['USR_LOGIN']; 
foreach(array_combine($decks, $type2) as $deck => $type3) 
{ 
    $gone = "UPDATE `$table_members` set claimed=REPLACE(claimed,'$deck, ',''), ctype=REPLACE(ctype,'$type3, ', '') where email='$email'"; 
    mysqli_query($connect, $gone); 
} 

Если вы можете опубликовать образец того, как данные организованы в вашей таблице, я думаю, что я могу предоставить лучший пример.

+0

Именно так оно организовано в таблице. Раньше я никогда не использовал REPLACE, поэтому для меня это новая территория. Это почти сработало, но когда я попытался удалить вторую запись, она разделила первую и вторую. Мы почти там! –

+0

На самом деле, снова глядя, он избавился от всех, кроме самого последнего. –

Смежные вопросы