Conjunto de datos filtrado con opciones de infinate

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Junio 16th, 2011, 4:12 pm

Esto es un poco difícil de explicar y tipo de loco.

Básicamente tengo una tabla de clientes y una tabla de metadatos.

Código: [ Select ]
+-----------+ +-------------+
| Customers | | Metadata    |
+-----------+ +-------------+
| id        | | id          |
| name      | | customer_id |
+-----------+ | key         |
              | value       |
              +-------------+
  1. +-----------+ +-------------+
  2. | Customers | | Metadata    |
  3. +-----------+ +-------------+
  4. | id        | | id          |
  5. | name      | | customer_id |
  6. +-----------+ | key         |
  7.               | value       |
  8.               +-------------+


Los datos de los campos proporciona una API que responde con json. Cada campo puede contener más de un valor, en cuyo caso serán separados por una coma.

Ahora mi código para romper un poco el aspecto de datos como este:
Código: [ Select ]
customer.each do |key,value|
    if key == CN_CONFIG['primary_key']
        #This is unique to all customers.
        if value == nil || value == ""
            # You have no name!!!!!!!
            break
        end
        if customers.include?(value)
            # This is an update
            update_c = Customer.find_by_name(value)
            customers.delete(value)
        else
            # This is a create
            update_c = nil
            customer_name = value
        end
    end
    if !ignore_fields.include?(key)
        if list_fields.include?(key)
            if value.scan(/,/).size > 0
                # We have a list
                puts "key: #{key} -- #{value} "
                value.split(',').each do |v|
                    data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
                    puts "  value: #{v.to_s.downcase.strip}"
                end
            else
                data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
                puts "key: #{key} | value: #{value.to_s.downcase.strip}"
            end
        else
            data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
            puts "key: #{key} | value: #{value.to_s.downcase.strip}"
        end
    end
end
  1. customer.each do |key,value|
  2.     if key == CN_CONFIG['primary_key']
  3.         #This is unique to all customers.
  4.         if value == nil || value == ""
  5.             # You have no name!!!!!!!
  6.             break
  7.         end
  8.         if customers.include?(value)
  9.             # This is an update
  10.             update_c = Customer.find_by_name(value)
  11.             customers.delete(value)
  12.         else
  13.             # This is a create
  14.             update_c = nil
  15.             customer_name = value
  16.         end
  17.     end
  18.     if !ignore_fields.include?(key)
  19.         if list_fields.include?(key)
  20.             if value.scan(/,/).size > 0
  21.                 # We have a list
  22.                 puts "key: #{key} -- #{value} "
  23.                 value.split(',').each do |v|
  24.                     data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
  25.                     puts "  value: #{v.to_s.downcase.strip}"
  26.                 end
  27.             else
  28.                 data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
  29.                 puts "key: #{key} | value: #{value.to_s.downcase.strip}"
  30.             end
  31.         else
  32.             data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
  33.             puts "key: #{key} | value: #{value.to_s.downcase.strip}"
  34.         end
  35.     end
  36. end


No es realmente a importantes a la cuestión aunque.

Qué pregunta es, ¿cómo se aplica un filtro a una tabla de metadatos?
Ejemplo decir algunas de las claves que aparecen en la tabla de metadatos son: género, birth_year, hermanos

Donde:
género = > m o f
birth_year = > (cualquier año aaaa)
hermanos = > (un nombre y cada cliente pueden tener número infinito)

(Por cierto no es el lol datos reales)

Ahora lo piensa hacer es grupo todas las claves para obtener todas las claves que se muestran en la tabla de metadatos. Estas se convierten en conjuntos de campo, todos los valores se convierten en casillas de verificación que tienen un menú seleccionar para incluir o excluir los criterios.

Ahora, ¿cómo se escribe una consulta para devolver a todos los clientes que cumplan los criterios?
#define NULL (::rand() % 2)
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Junio 16th, 2011, 4:12 pm

  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Junio 19th, 2011, 3:59 pm

Esto:

SpooF escribió:
Cada campo puede contener más de un valor, en cuyo caso estén separados por una coma.


Me hace pensar que debería leer esto:http://dev.mysql.com/tech-resources/art ... ation.html

Valores separados por comas en una columna generalmente es un signo de que está haciendo mal. Esto es especialmente cierto si los datos es relacionales y se utiliza como una clave o un índice.

Las consultas de búsqueda sí quedará claras después de normalizar los datos.
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Junio 21st, 2011, 8:41 pm

Los valores de las columnas no son sólo los valores devueltos por la API que rellena la tabla separados por comas. A la naturaleza que hay un número infinito de claves posibles regresó y cada clave puede tener más de un valor asociado Im haciendo una clave valor sistema par almacenar mi información.

Se puede ver al leer el código que figura más arriba y en el extracto siguiente:
Código: [ Select ]
if value.scan(/,/).size > 0
  # We have a list
  puts "key: #{key} -- #{value} "
  value.split(',').each do |v|
    data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
    puts " value: #{v.to_s.downcase.strip}"
  end
else
  data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
  puts "key: #{key} | value: #{value.to_s.downcase.strip}"
end
  1. if value.scan(/,/).size > 0
  2.   # We have a list
  3.   puts "key: #{key} -- #{value} "
  4.   value.split(',').each do |v|
  5.     data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
  6.     puts " value: #{v.to_s.downcase.strip}"
  7.   end
  8. else
  9.   data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
  10.   puts "key: #{key} | value: #{value.to_s.downcase.strip}"
  11. end
#define NULL (::rand() % 2)

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 142 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC