Inquery de requête MySQL

  • ScottG
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Juil 06, 2010
  • Messages: 265
  • Status: Offline

Message Avril 10th, 2012, 11:42 am

OK donc Ive travaille sur un système d'archivage image (réaménagement) et la question Im avoir est que les gens ont des questions de recherche. Maintenant, il y a certaines choses sur ce un TI que les mots clés qui sont attachés doivent être ajoutés au dossier fichiers db et pas un id relatifs au mot-clé (pas mon style mais c'est comment il doit être). Le raisonnement derrière cela il que si le mot clé obtient supprimé n'empêche pas veulent être en mesure de trouver le fichier avec ce mot clé (encore une fois pas mon style je ne supprimez pas quoi que ce soit de la base de données).

Voici donc un exemple de table nivellement vers le bas de la colonne de mots clés
MYSQL Code: [ Select ]
Files Table
+----------+----------------------------------------+
| id       | keywords                               |
+----------+----------------------------------------+
| 1        | ["Test","test 2","test 3"]             |
| 2        | ["team","tetris"]                      |
| 3        | ["Test", "te"]                         |
| 4        | ["te"]                                 |
 
  1. Files Table
  2. +----------+----------------------------------------+
  3. | id       | keywords                               |
  4. +----------+----------------------------------------+
  5. | 1        | ["Test","test 2","test 3"]             |
  6. | 2        | ["team","tetris"]                      |
  7. | 3        | ["Test", "te"]                         |
  8. | 4        | ["te"]                                 |
  9.  

Donc si j'ai couru une requête comme
MYSQL Code: [ Select ]
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` LIKE '%te%'
 
  1. SELECT `files`.`id`
  2. FROM `files`
  3. WHERE `files`.`keywords` LIKE '%te%'
  4.  

Tous les trois des résultats pourrait obtenir dans le tableau de l'exemple ci-dessus où tous je ne voudrais est dossier 3 et 4. La colonne de mots clés est une colonne de texte. faire une requête sql comme
MYSQL Code: [ Select ]
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` LIKE 'te'
 
OR like
 
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` = 'te'
 
  1. SELECT `files`.`id`
  2. FROM `files`
  3. WHERE `files`.`keywords` LIKE 'te'
  4.  
  5. OR like
  6.  
  7. SELECT `files`.`id`
  8. FROM `files`
  9. WHERE `files`.`keywords` = 'te'
  10.  

ne retournait aucun résultat car c'est dans un format de tableau de texte. De quoi aurait besoin de faire, c'est avoir une requête trouver exactement te dans les résultats. Je pourrais faire une requête pour trouver le premier ensemble puis le processus les mots-clés en php et match contre la recherche pour trouver l'exact match mais préféreraient ne pas avoir php traiter et avoir Mysql retourne le jeu de résultat correct.

Elle n'importe qui a des pensées ce veuillez me le faire savoir, et n'hésitez pas à poser toutes les questions que vous peut avoir
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Avril 10th, 2012, 11:42 am

  • ScottG
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Juil 06, 2010
  • Messages: 265
  • Status: Offline

Message Avril 10th, 2012, 2:56 pm

Bien. Donc après beaucoup de délibérations avec le client et plusieurs tentatives infructueuses de MySQL je vais le continuer pour avoir les mots clés attachés au fichier ainsi aller avec comment je structure de la base de données et utiliser un nombre au tableau d'une relation. Cela permettra d'avoir une correspondance exacte pour une recherche ainsi que l'utilisation dit attaché des mots clés pour tout simplement faire une wild card de la recherche, donc je n'ai pas à se joindre à la table de relation quand faisant une wild card de la recherche et de maintenir la compatibilité descendante.
  • Bigwebmaster
  • Site Admin
  • Site Admin
  • Avatar de l’utilisateur
  • Inscription: Déc 20, 2002
  • Messages: 8925
  • Loc: Seattle, WA & Phoenix, AZ
  • Status: Offline

Message Avril 11th, 2012, 9:29 am

Bonjour Scott,

Est-ce que vous sont limités à seulement à l'aide de cette structure de base de données ? La raison pour laquelle que je demande est que je pense que le moyen idéal pour ce faire serait de créer un tableau de mots clés et d'associer les mots clés avec l'ID de fichier. Si vous auriez encore votre table de fichiers, mais vous mettriez n'est plus dans les mots clés. Au lieu de cela vous créez une nouvelle table appelée Mots-clés avec une structure similaire à :

MYSQL Code: [ Select ]
Keywords Table
+----------+----------------------------------------+
| file_id  | keyword                                |
+----------+----------------------------------------+
| 1        | Test                                   |
| 1        | test 2                                 |
| 1        | test 3                                 |
| 2        | team                                   |
| 2        | tetris                                 |
| 3        | Test                                   |
| 3        | te                                     |
| 4        | te                                     |
  1. Keywords Table
  2. +----------+----------------------------------------+
  3. | file_id  | keyword                                |
  4. +----------+----------------------------------------+
  5. | 1        | Test                                   |
  6. | 1        | test 2                                 |
  7. | 1        | test 3                                 |
  8. | 2        | team                                   |
  9. | 2        | tetris                                 |
  10. | 3        | Test                                   |
  11. | 3        | te                                     |
  12. | 4        | te                                     |


Donc, fondamentalement vous répertorier chaque mot clé individuellement et associer à l'id_fichier qu'il a. Alors quand vous faites une requête MySQL il vous indiquera exactement quelle ID du fichier ont une correspondance exacte sur un mot clé. Par exemple :

MYSQL Code: [ Select ]
SELECT f.id
FROM files f, keywords k
WHERE f.id = k.file_id
AND k.keyword = 'te'
  1. SELECT f.id
  2. FROM files f, keywords k
  3. WHERE f.id = k.file_id
  4. AND k.keyword = 'te'


Qui reviendrait de fichier id 3 et 4.

Vous pourriez aussi aller un pas plus loin pour empêcher la copié encore et encore dans ce tableau des mots clés et faire une autre table de mot-clé qui répertorie chaque mot-clé unique et assigne à chacun une keyword_id. Puis avec le tableau ci-dessus vous mettrait le keyword_id et le fichier file_id.

Avec ceux-ci, vous voudrez vous assurer que vous utilisez l'index pour accélérer les temps de requête.

Espérons que cela aide un peu:)
Ozzu Hosting - Want your website on a fast server like Ozzu?
  • ScottG
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Juil 06, 2010
  • Messages: 265
  • Status: Offline

Message Avril 11th, 2012, 10:26 am

Je suis limité à cette structure de base de données et je souscris pleinement votre thats solution comment je personnellement aurait fait mais Im reconstruire un système que quelqu'un d'autre a fait et il a été utilisé pour quelque temps et il y a plus de 100 000 fichiers attachés au réseau tout comme de nombreux enregistrements de base de données si ce n'est plus aggraver même il y a aussi un tableau de mots clés qui duplique essentiellement les mots clés non seulement à la fichiers mais les mots eux-mêmes. C'est vraiment un gâchis et Ive a essayé de leur parler en une refonte complète de la base de données, mais ils veulent garder la même structure pour maintenir la compatibilité descendante et donc si quelque chose va mal la can flip arrière à l'ancien système qui actuellement œuvres vraiment lente mais fonctionne.

Voici un exemple de ce que Im portant
MYSQL Code: [ Select ]
 
Category Table
+----------+---------------+------------------------+
| ID       | busorgID      | display_name           |
+----------+----------------------------------------+
| 1        | 1             | cat 1                  |
| 2        | 1             | cat 2                  |
| 3        | 3             | cat 1                  |
| 4        | 2             | cat 1                  |
| 5        | 3             | cat 2                  |
| 6        | 3             | cat 3                  |
| 7        | 1             | cat 3                  |
 
Keywords Table
+----------+---------------+----------------+-----------+
| ID       | busorgID      | keyword        | parentID  |
+----------+--------------------------------------------+
| 1        | 1             | Test           | 1         |
| 2        | 1             | test 2         | 2         |
| 3        | 1             | test 3         | 7         |
| 4        | 1             | team           | 7         |
| 5        | 1             | tetris         | 7         |
| 6        | 1             | Test           | 1         |
| 7        | 1             | te             | 2         |
| 8        | 1             | te             | 2         |
| 9        | 2             | tetris         | 2         |
| 10       | 2             | Test           | 2         |
| 11       | 2             | te             | 2         |
| 12       | 2             | te             | 5         |
| 13       | 3             | Test           | 3         |
| 14       | 3             | te             | 3         |
| 15       | 3             | te             | 3         |
| 16       | 3             | Test           | 5         |
| 17       | 3             | te             | 5         |
| 18       | 3             | te             | 6         |
 
 
  1.  
  2. Category Table
  3. +----------+---------------+------------------------+
  4. | ID       | busorgID      | display_name           |
  5. +----------+----------------------------------------+
  6. | 1        | 1             | cat 1                  |
  7. | 2        | 1             | cat 2                  |
  8. | 3        | 3             | cat 1                  |
  9. | 4        | 2             | cat 1                  |
  10. | 5        | 3             | cat 2                  |
  11. | 6        | 3             | cat 3                  |
  12. | 7        | 1             | cat 3                  |
  13.  
  14. Keywords Table
  15. +----------+---------------+----------------+-----------+
  16. | ID       | busorgID      | keyword        | parentID  |
  17. +----------+--------------------------------------------+
  18. | 1        | 1             | Test           | 1         |
  19. | 2        | 1             | test 2         | 2         |
  20. | 3        | 1             | test 3         | 7         |
  21. | 4        | 1             | team           | 7         |
  22. | 5        | 1             | tetris         | 7         |
  23. | 6        | 1             | Test           | 1         |
  24. | 7        | 1             | te             | 2         |
  25. | 8        | 1             | te             | 2         |
  26. | 9        | 2             | tetris         | 2         |
  27. | 10       | 2             | Test           | 2         |
  28. | 11       | 2             | te             | 2         |
  29. | 12       | 2             | te             | 5         |
  30. | 13       | 3             | Test           | 3         |
  31. | 14       | 3             | te             | 3         |
  32. | 15       | 3             | te             | 3         |
  33. | 16       | 3             | Test           | 5         |
  34. | 17       | 3             | te             | 5         |
  35. | 18       | 3             | te             | 6         |
  36.  
  37.  


Comme vous pouvez le voir horriblement mauvaise conception de la base de données et ses frustrant parce qu'ils ne laisse pas me revoir ou modifier les tables

Si ma solution est quelque chose de semblable à ce que je n'aurais fait et vous suggère

MYSQL Code: [ Select ]
 
Keyword Relations Table
+------------+---------------+----------------+
| keyword_id | file_id       | rating         |
+------------+--------------------------------+
| 1          | 1             | 5              |
| 2          | 1             | 4              |
| 3          | 1             | 3              |
| 4          | 2             | 5              |
| 5          | 2             | 5              |
| 6          | 2             | 3              |
| 7          | 3             | 2              |
| 8          | 3             | 1              |
 
 
  1.  
  2. Keyword Relations Table
  3. +------------+---------------+----------------+
  4. | keyword_id | file_id       | rating         |
  5. +------------+--------------------------------+
  6. | 1          | 1             | 5              |
  7. | 2          | 1             | 4              |
  8. | 3          | 1             | 3              |
  9. | 4          | 2             | 5              |
  10. | 5          | 2             | 5              |
  11. | 6          | 2             | 3              |
  12. | 7          | 3             | 2              |
  13. | 8          | 3             | 1              |
  14.  
  15.  


La cote est juste un drapeau de trieuse de pages que l'utilisateur de base de la pertinence des mots-clés de l'image.
  • ScottG
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Juil 06, 2010
  • Messages: 265
  • Status: Offline

Message Avril 11th, 2012, 10:58 am

IVe été en écrivant tout le nouveau code à être tout simplement changé de sorte que lorsque la base de données dose get surchargé et il sera je peut changer avec le facilement à une structure de base de données comme j'utiliser et ensuite écrire quelques php pour transférer les info de l'ancienne base de données à une nouvelle.

Afficher de l'information

  • Total des messages de ce sujet: 5 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 317 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