2011-05-21 15 views
6

Vi esta pregunta: how to save tags(keywords) in database?Cómo guardar etiquetas/palabras clave de la matriz a la base de datos con php?

Buena respuesta sobre cómo debe estructurarse la base de datos. ¿Pero de qué manera es mejor hacer el proceso de ahorro en php? Un proceso que maneja tanto la adición como la eliminación.

Las palabras clave se publican como una matriz.

Editar: El aspecto actual código como esto:

<?php 
    $new = explode(',', $_POST['tags']); 

    $query = mysql_query("SELECT * FROM pages_tags WHERE page_id = '".$page_id."'") or die(mysql_error()); 
    while ($row = mysql_fetch_array($query)) 
    { 
    $old[] = $row['tag']; 
    } 

    $tags_to_add = array_diff($new, $old); 
    $tags_to_remove = array_diff($old, $new); 

    if (is_array($tags_to_add)) 
    { 
    foreach ($tags_to_add as $add_tag) { $insert_tags[] = "('".$add_tag."', '".$page_id."')"; } 
    $sql_insert_tags = "INSERT INTO pages_tags (tag, page_id) VALUES ".implode(',', $insert_tags); 
    mysql_query($sql_insert_tags) or die(mysql_error()); 
    } 

    if (is_array($tags_to_remove)) 
    { 
    foreach ($tags_to_remove as $remove_tag) { $delete_tags[] = "('".$remove_tag."')"; } 
    $sql_delete_tags = "DELETE FROM pages_tags WHERE page_id = '".$page_id."' AND tag IN (".implode(',', $delete_tags).")"; 
    mysql_query($sql_delete_tags) or die(mysql_error()); 
    } 
?> 

Respuesta

4

propongo para seleccionar las etiquetas actuales y después de que puede hacer:

$tags_to_add = array_diff($new, $old); 
$tags_to_remove = array_diff($old, $new); 

Después de que escriba 2 consultas triviales: uno para insertar a granel y uno para eliminar.

+0

@zerkms Esta respuesta fue realmente interesante. Entonces, ¿empiezo por guardar las etiquetas de publicación y las etiquetas de la base de datos como cada matriz? Y luego ejecute un ciclo while desde la base de datos y haga coincidir con '$ tags_to_add', y añádalos que no existan ya en la base de datos. Luego, haga una nueva base de datos mientras se repite el ciclo para que las etiquetas se eliminen. –

+0

@Peter Westerlund: inserción masiva: 'INSERT INTO table (field) VALUES ('val1'), ('val2'), ...'. Suprima 'DELETE FROM table WHERE campo IN ('val1', 'val2', ...)'. Entonces solo necesitas 2 consultas. Pero al principio necesitas consultar todas las ** etiquetas ** actualmente existentes ('$ old') y diferenciarlas con' $ new' – zerkms

+0

@zerkms ¿Es necesario tener todas las tablas'posts','tags' y'post_tags ¿? Lo sabotea un poco porque quiero que la fila de etiquetas de la tabla "etiquetas" desaparezca automáticamente si no queda ninguna publicación con esa etiqueta. –

Cuestiones relacionadas