DataSet filtrage avec options d'infinate

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Juin 16th, 2011, 4:12 pm

Il s'agit de la sorte de crazy et un peu difficile à expliquer.

Essentiellement, j'ai une table de clients et une table de métadonnées.

Code: [ 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.               +-------------+


Les données pour les champs sont fournies par une API qui répond avec json. Chaque champ peut contenir plus d'une valeur, auquel cas ils seront séparés par une virgule.

Droit maintenant mon code pour briser les données ressemble un peu à ceci :
Code: [ 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


Pas vraiment à important à la question si.

Quelle question est de savoir comment vous filtrer sur une table de données meta ?
Exemple de dire certaines des clés répertoriées dans le tableau de métadonnées sont : sexe, les birth_year, les frères et sœurs

Où :
sexe = > m ou f
birth_year = > (toute année aaaa)
frères et sœurs = > (un nom et chaque client peuvent avoir nombre infini)

(Btw ce n'est pas le données réelles lol)

Maintenant, ce que j'ai l'intention de le faire est groupe toutes les clés pour obtenir toutes les clés qui se manifestent dans la table de métadonnées. Ces tourner dans les ensembles de champs, toutes les valeurs de transforment des cases à cocher qui ont un menu select pour inclure ou exclure les critères.

Maintenant, comment écrire une requête pour retourner tous les clients qui satisfont aux critères ?
#define NULL (::rand() % 2)
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Juin 16th, 2011, 4:12 pm

  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Sep 21, 2005
  • Messages: 274
  • Status: Offline

Message Juin 19th, 2011, 3:59 pm

Ceci :

SpooF a écrit:
Chaque champ peut contenir plus d'une valeur, auquel cas ils seront séparés par une virgule.


Me fait penser à que vous devriez lire ceci :http://dev.mysql.com/tech-resources/art ... ation.html

Valeurs séparées par des virgules dans une colonne est généralement un signe vous font mal. Cela est particulièrement vrai si les données sont relationnelles et sont utilisées comme une clé ou un index.

Les requêtes de recherche eux-mêmes deviendra évident après que vous normalisez vos données.
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Juin 21st, 2011, 8:41 pm

Ils ont des valeurs dans les colonnes ne sont pas séparés par des virgules, seules les valeurs renvoyées par l'API qui remplit la table. De la nature qu'il y a un nombre infini de clés possibles retournées et chaque clé peut avoir plus d'une valeur associée Im faisant une clé valeur système paire pour stocker mes renseignements.

Vous pouvez voir qu'en lisant le code présenté ci-dessus et l'extrait ci-dessous :
Code: [ 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)

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 169 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC