Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Comparar registro para ingresar

Estas en el tema de Comparar registro para ingresar en el foro de Mysql en Foros del Web. Estoy con un sistema de tags, al terminarlo lo voy a subir al foro como aporte ya que no vi ninguno de este tipo, esta ...
  #1 (permalink)  
Antiguo 28/12/2011, 18:25
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Comparar registro para ingresar

Estoy con un sistema de tags, al terminarlo lo voy a subir al foro como aporte ya que no vi ninguno de este tipo, esta casi terminado, me falta esta ultima parte que no la estoy pudiendo realizar. Bien aqui la duda:

-El sistema funciona ingresando tags en una tabla (Tags). Hasta aqui perfecto.

-Ahora en mi segunda tabla (tags_noticias) debería insertar el idTag y el idNoticia.
El idNoticia lo obtengo perfectamente. Lo que se me complica es obtener el idTag de la tabla Tags para insertarlo nuevamente con su correspondiente idNoticia. Cuando agrego un Tag lo hago de esta forma:

Código MySQL:
Ver original
  1. // inserto los tags de registro en la db
  2.        $palabra = $tags;
  3.        $array = explode(", ",$palabra);
  4.        foreach ($array as $tagsimple) {
  5.        $query = "INSERT INTO Tags (Tag) SELECT '$tagsimple' FROM (SELECT NULL) d WHERE NOT EXISTS (SELECT NULL FROM Tags WHERE Tag = '$tagsimple')";
  6.        $result = mysql_query($query, $dbConn) or die(mysql_error()); }
  7.        die;

-Ahora lo que debo hacer es, por ejemplo si yo ingreso el tag ventilador, me busque el idTag correspondiente a ventilador en la tabla Tags. Como podria obtener esto? Desde ya muchisimas gracias!
  #2 (permalink)  
Antiguo 28/12/2011, 20:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Comparar registro para ingresar

Ese problema lo debes resolver en el Foro de PHP, que es donde se tratan los asuntos de programación en PHP (cada lenguaje tiene su foro específico). No es un problema para resolver en BBDD.
De todos modos te anticipo que si el ID en cuestión es un autoincremental, PHP tiene en la librería de MySQL una función específica (recomiendo enfáticamente leer el manual de PHP): mysql_insert_id(), que ejecutada inmediatamente después de la inserción devuelve el ID generado.
El resto de las dudas, por favor consúltalo en el Foro de PHP (Función de la sección de Base de Datos).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/12/2011, 21:15
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Comparar registro para ingresar

Mysql_insert_id precisamente lo se usar y lo uso para obtener el id de la noticia en este caso. Pero no me sirve para lo que yo preciso, ya que guardo los valores en un vector, y ademas no siempre ingreso un tag, porque si el tag ingresado ya esta en la tabla tags, no se agrega nuevamente, esto para tener un id por cada tag y que no se repitan, por lo tanto si el tag existe, no se agregaria un nuevo id, no lo obtendria con la funcion que me dijiste y no me sirve.

Bueno vere por el lado de php si se puede lograr.. gracias igualmente!
  #4 (permalink)  
Antiguo 29/12/2011, 05:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Comparar registro para ingresar

Código MySQL:
Ver original
  1. INSERT INTO Tags (Tag)
  2.         SELECT '$tagsimple'
  3.             FROM (SELECT NULL) d
  4.             WHERE NOT EXISTS (SELECT NULL
  5.                          FROM Tags
  6.                           WHERE Tag = '$tagsimple')

Espectacular la query!!!!! Funciona?

Creo que seria mas simple si defines un indice unico en la tabla Tags sobre el campo Tag y luego simplemente ejecutas

INSERT INTO Tags (Tag) VALUE ('$tagsimple')

si esta query retorna 1 (true) significa que se a realizado el INSERT ya que no estaba el tag.

En este caso podrías usar la funcion de php para obtener el id.

Si retorna 0 false es que no se ha realizado el insert presumiblemente por que ya estaba...

En este caso deberas ejecutar

SELECT id FROM Tags WHERE Tag='$tagsimple'

Gracias al indice será una consulta bastante rápida...

Esta és la solución SQL para insertarla en el bucle php y para hacer bien el control de errores, como te dice gnzsoloyo, no seria tema de este foro.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 29/12/2011, 05:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Comparar registro para ingresar

Me podrías explicar qué es lo que hacen estos SELECT NULL:
Código MySQL:
Ver original
  1. INSERT INTO Tags (Tag)
  2. SELECT '$tagsimple'
  3.      (SELECT NULL
  4.      FROM Tags
  5.       WHERE Tag = '$tagsimple')
En todos los años que hace que trabajo con MySQL es la primera vez que veo algo así.
¿CUál es la meta de hacer un FROM (NULL)? Porque ese es el resultado real...

Por otro lado, y volviendo a tu primer post:
Cita:
-Ahora en mi segunda tabla (tags_noticias) debería insertar el idTag y el idNoticia.
El idNoticia lo obtengo perfectamente. Lo que se me complica es obtener el idTag de la tabla Tags para insertarlo nuevamente con su correspondiente idNoticia. Cuando agrego un Tag lo hago de esta forma:
Por el ejemplo que pones en ese post, el idTag debería ser autoincremental, ya que no lo estás poniendo como columna del INSERT ni como dato del subsiguiente SELECT. El tag, por su lado, por lo que parece es un conjunto de textos separados por comas.
Tengo la impresión de que hay algún error en el diseño de tu esquema.
¿Podrías explicar un poco mejor cómo son las tablas y cómo deben quedar los datos en ellas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 29/12/2011, 12:24
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Comparar registro para ingresar

La query funciona perfectamente, la solucion me la dio un user de este foro aqui
  #7 (permalink)  
Antiguo 29/12/2011, 13:15
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Comparar registro para ingresar

Cita:
Iniciado por maximilianojcelis Ver Mensaje
La query funciona perfectamente, la solucion me la dio un user de este foro aqui
Estoy de acuerdo con gnzsoloyo puede ser que el query te funcione pero por cultura general nos podrías explicar por que lo realizas de esa manera?
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 29/12/2011 a las 13:33

Etiquetas: comparacion, insert, registros, select, tags
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:11.