Inquery de consulta de MySQL
- ScottG
- Proficient


- Registrado: Jul 06, 2010
- Mensajes: 280
- Status: Online
OK para Ive trabajando sobre un sistema de archivo de imagen (remodelación) y la cuestión Im tener es que las personas están teniendo problemas de búsqueda. Ahora hay algunas cosas acerca de uno ello que tienen las palabras clave que se adjuntan a agregarse en el registro de base de datos de archivos y un id no relacionados con la palabra clave (no es mi estilo, pero esto es cómo tiene que ser). El razonamiento detrás de esto es que si se elimina la palabra clave aún quiere ser capaz de encontrar el archivo con la palabra clave (una vez más no mi estilo no borra nada de la base de datos).
Este es un tabla de ejemplo oficiales hacia abajo en la columna de palabras clave
Así que si me encontré una consulta como
Obtendría tres de los resultados en la tabla de ejemplo anterior cuando todos me gustaría es registro 3 y 4. La columna de palabras clave es una columna de texto. al hacerlo una consulta sql como
que no devuelven ningún resultado ya que es en un formato basado en texto de la matriz. Lo que tengo que hacer es tener una consulta encuentra exactamente te en los resultados. Podría hacer una consulta para buscar el primer conjunto entonces el proceso de las palabras clave en php y combate contra la búsqueda para encontrar la exacta coinciden pero preferirían no tener php procesarla y tiene Mysql devuelve el conjunto de resultados correctos.
Por lo que nadie tiene ningún pensamientos esto hágamelo saber y siéntase libre de pedir cualquier consulta que tenga
Este es un tabla de ejemplo oficiales hacia abajo en la columna de palabras clave
MYSQL Código: [ Select ]
Files Table
+----------+----------------------------------------+
| id | keywords |
+----------+----------------------------------------+
| 1 | ["Test","test 2","test 3"] |
| 2 | ["team","tetris"] |
| 3 | ["Test", "te"] |
| 4 | ["te"] |
+----------+----------------------------------------+
| id | keywords |
+----------+----------------------------------------+
| 1 | ["Test","test 2","test 3"] |
| 2 | ["team","tetris"] |
| 3 | ["Test", "te"] |
| 4 | ["te"] |
- Files Table
- +----------+----------------------------------------+
- | id | keywords |
- +----------+----------------------------------------+
- | 1 | ["Test","test 2","test 3"] |
- | 2 | ["team","tetris"] |
- | 3 | ["Test", "te"] |
- | 4 | ["te"] |
Así que si me encontré una consulta como
MYSQL Código: [ Select ]
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` LIKE '%te%'
FROM `files`
WHERE `files`.`keywords` LIKE '%te%'
- SELECT `files`.`id`
- FROM `files`
- WHERE `files`.`keywords` LIKE '%te%'
Obtendría tres de los resultados en la tabla de ejemplo anterior cuando todos me gustaría es registro 3 y 4. La columna de palabras clave es una columna de texto. al hacerlo una consulta sql como
MYSQL Código: [ Select ]
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` LIKE 'te'
OR like
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` = 'te'
FROM `files`
WHERE `files`.`keywords` LIKE 'te'
OR like
SELECT `files`.`id`
FROM `files`
WHERE `files`.`keywords` = 'te'
- SELECT `files`.`id`
- FROM `files`
- WHERE `files`.`keywords` LIKE 'te'
- OR like
- SELECT `files`.`id`
- FROM `files`
- WHERE `files`.`keywords` = 'te'
que no devuelven ningún resultado ya que es en un formato basado en texto de la matriz. Lo que tengo que hacer es tener una consulta encuentra exactamente te en los resultados. Podría hacer una consulta para buscar el primer conjunto entonces el proceso de las palabras clave en php y combate contra la búsqueda para encontrar la exacta coinciden pero preferirían no tener php procesarla y tiene Mysql devuelve el conjunto de resultados correctos.
Por lo que nadie tiene ningún pensamientos esto hágamelo saber y siéntase libre de pedir cualquier consulta que tenga
- Anonymous
- Bot


- Registrado: 25 Feb 2008
- Mensajes: ?
- Loc: Ozzuland
- Status: Online
Abril 10th, 2012, 11:42 am
- ScottG
- Proficient


- Registrado: Jul 06, 2010
- Mensajes: 280
- Status: Online
Vale. Así que después de mucha deliberación con el cliente y varios intentos fallidos de MySQL que voy a continuar a tener las palabras clave asociadas al archivo, así como ir con cómo estructura de la base de datos y utilizar un número de tabla de una relación. Esto hará que pueda tener una coincidencia exacta para una búsqueda así como dice conectado palabras simplemente hacer una búsqueda con comodín para no tener que unir a la tabla de relación cuando se realiza una búsqueda con comodín y mantener la compatibilidad.
- Bigwebmaster
- Site Admin


- Registrado: Dic 20, 2002
- Mensajes: 8934
- Loc: Seattle, WA & Phoenix, AZ
- Status: Offline
Hola Scott,
¿Se están restringidos sólo uso esa estructura de base de datos? La razón que le pido es que me parece la forma ideal para ello sería crear una tabla de palabras clave y asociar las palabras clave con el identificador de archivo. Así tendría aún la tabla de archivos, pero ya no sería poner palabras clave en ellos. En su lugar sería crear una nueva tabla llamada palabras clave con una estructura similar a:
Así que básicamente sería lista individualmente cada palabra clave y asociarlo con el file_id que lo tiene. Entonces cuando haces una consulta de MySQL le permitirá conocer exactamente qué identificadores de archivo tienen una coincidencia exacta de una palabra clave. Por ejemplo:
Volvería a id de archivo de 3 y 4.
También podría ir un paso más para evitar que palabras clave se duplica una y otra vez en esta tabla y hacer otra tabla de palabra clave que muestra cada palabra clave única y asigna a cada uno un keyword_id. Luego con la tabla anterior se pondría el keyword_id y el file_id.
Con estos desea asegurarse de que utilizar índices para acelerar los tiempos de consulta.
Espero que esto ayude un poco
¿Se están restringidos sólo uso esa estructura de base de datos? La razón que le pido es que me parece la forma ideal para ello sería crear una tabla de palabras clave y asociar las palabras clave con el identificador de archivo. Así tendría aún la tabla de archivos, pero ya no sería poner palabras clave en ellos. En su lugar sería crear una nueva tabla llamada palabras clave con una estructura similar a:
MYSQL Código: [ Select ]
Keywords Table
+----------+----------------------------------------+
| file_id | keyword |
+----------+----------------------------------------+
| 1 | Test |
| 1 | test 2 |
| 1 | test 3 |
| 2 | team |
| 2 | tetris |
| 3 | Test |
| 3 | te |
| 4 | te |
+----------+----------------------------------------+
| file_id | keyword |
+----------+----------------------------------------+
| 1 | Test |
| 1 | test 2 |
| 1 | test 3 |
| 2 | team |
| 2 | tetris |
| 3 | Test |
| 3 | te |
| 4 | te |
- Keywords Table
- +----------+----------------------------------------+
- | file_id | keyword |
- +----------+----------------------------------------+
- | 1 | Test |
- | 1 | test 2 |
- | 1 | test 3 |
- | 2 | team |
- | 2 | tetris |
- | 3 | Test |
- | 3 | te |
- | 4 | te |
Así que básicamente sería lista individualmente cada palabra clave y asociarlo con el file_id que lo tiene. Entonces cuando haces una consulta de MySQL le permitirá conocer exactamente qué identificadores de archivo tienen una coincidencia exacta de una palabra clave. Por ejemplo:
MYSQL Código: [ Select ]
SELECT f.id
FROM files f, keywords k
WHERE f.id = k.file_id
AND k.keyword = 'te'
FROM files f, keywords k
WHERE f.id = k.file_id
AND k.keyword = 'te'
- SELECT f.id
- FROM files f, keywords k
- WHERE f.id = k.file_id
- AND k.keyword = 'te'
Volvería a id de archivo de 3 y 4.
También podría ir un paso más para evitar que palabras clave se duplica una y otra vez en esta tabla y hacer otra tabla de palabra clave que muestra cada palabra clave única y asigna a cada uno un keyword_id. Luego con la tabla anterior se pondría el keyword_id y el file_id.
Con estos desea asegurarse de que utilizar índices para acelerar los tiempos de consulta.
Espero que esto ayude un poco
Ozzu Hosting - Want your website on a fast server like Ozzu?
- ScottG
- Proficient


- Registrado: Jul 06, 2010
- Mensajes: 280
- Status: Online
Estoy restringido a esa estructura de base de datos y coincido plenamente con sus thats solución cómo yo personalmente habría hecho pero Im reconstruir un sistema que alguien hizo lo contrario y ha estado en uso por algún tiempo y hay más de 100.000 archivos adjuntos en el sistema con sólo como muchos registros de base de datos si no más que empeorar las cosas incluso existe también una tabla de palabras clave que básicamente duplica las palabras clave no sólo para la archivos pero las palabras de ellos mismos. Es realmente un lío y Ive intentó hablar en un rediseño completo de base de datos pero que quieren mantener la misma estructura para mantener la compatibilidad con versiones anteriores y, por tanto si algo va mal pueden voltean hacia el sistema antiguo que actualmente funciona, realmente lento pero funciona.
Este es un ejemplo de qué ocuparse de Im
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 |
Como puede ver, horriblemente mal diseño de base de datos y su frustrante porque ellos no me deja rediseñar o modificar las tablas
así que mi solución es algo similar a lo que habría hecho y sugirió
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 |
La clasificación es sólo una bandera de clasificador que se base la relevancia de palabras clave para la imagen.
Este es un ejemplo de qué ocuparse de Im
MYSQL Código: [ 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 |
- 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 |
Como puede ver, horriblemente mal diseño de base de datos y su frustrante porque ellos no me deja rediseñar o modificar las tablas
así que mi solución es algo similar a lo que habría hecho y sugirió
MYSQL Código: [ 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 |
- 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 |
La clasificación es sólo una bandera de clasificador que se base la relevancia de palabras clave para la imagen.
- ScottG
- Proficient


- Registrado: Jul 06, 2010
- Mensajes: 280
- Status: Online
Ive sido escribir todo el código nuevo a cambiarse simplemente que cuando la base de datos dosis obtener sobrecargado y puede cambiar con el con facilidad a una estructura de base de datos como sería usar y, a continuación, escribir algo de php para transferir información desde la base de datos antigua a una nueva.
Página 1 de 1
Para responder a este tema que necesita para ingresar o registrarse. Es gratis.
Publicar Información
- Total de mensajes en este tema: 5 mensajes
- Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 194 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
