Buenas noches,
Estoy iniciándome en el mundo de JSF y haciendo una consulta a una BBDD, me encuentro con que si hago por ejemplo:
SELECT * FROM tabla;
La página JSF me lo muestra perfectamente bien, es decir, muestra los resultados.
Si hago:
SELECT * FROM tabla WHERE id%2=1;
Me lo muestra perfecto también, solo muestra los registros con ID impar.
El problema ha venido cuando he hecho:
SELECT * FROM tabla WHERE id%2=1 AND campo1 LIKE '%7%';
Aquí me ha mostrado los dos registros duplicados, en la tabla hay tres campos: id, camp1 y camp2. id es "autoincremental", camp1 y camp2 contienen registros cuyo "patrón" es: fila<num=ID>A|B (para camp1 A y camp2 B), por ejemplo:
mysql> select * from trescols;
+----+---------+---------+
| id | camp1 | camp2 |
+----+---------+---------+
| 1 | fila1A | fila1B |
| 2 | fila2A | fila2B |
| 3 | fila3A | fila3B |
| 4 | fila4A | fila4B |
...
Por lo que el resultado de la última consulta habría de ser, todos los registros donde el campo "camp1" contiene 7, y así es cuando ejecuto la consulta desde el CLI de mysql:
mysql> select * from trescols where id%2=1 and camp1 LIKE '%7%';
+----+---------+---------+
| id | camp1 | camp2 |
+----+---------+---------+
| 7 | fila7A | fila7B |
| 17 | fila17A | fila17B |
+----+---------+---------+
2 rows in set (0.10 sec)
Pero cuando ejecuto la sentencia para verla desde JSF, me aparecen ambos registros duplicados:
ID Camp1 Camp2
7 fila7A fila7B
17 fila17A fila17B
7 fila7A fila7B
17 fila17A fila17B
He modificado la consulta para poner el LIMIT 1,1 y entonces me aparece repetido el segundo registro:
ID Camp1 Camp2
17 fila17A fila17B
17 fila17A fila17B
Si pongo LIMIT 0,1 aparece duplicado el primer registro, desde el CLI de mysql aparece solo un registro.
Pensé que se debería a que hay dos condiciones, aunque no tendría que pasar, entonces he sacado la condición del residuo del campo "id/2=1" y me sigue pasando lo mismo, lo que me hace pensar en que es algo de Java.
Antes de cargar contra java, he creado un "stored procedure" de mysql que hiciese la misma sentencia y desde el bean solo llamar al stored procedure con el "call procedimiento()" y he hecho lo siguiente:
mysql> CREATE PROCEDURE getTrescols3()
-> BEGIN
-> SELECT * FROM trescols WHERE camp1 LIKE '%7%';
-> END
-> //
Desde el CLI la llamo y desvuelve lo correcto:
mysql> call gettrescols3();
+----+---------+---------+
| id | camp1 | camp2 |
+----+---------+---------+
| 7 | fila7A | fila7B |
| 17 | fila17A | fila17B |
+----+---------+---------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Y desde JSF:
ID Camp1 Camp2
7 fila7A fila7B
17 fila17A fila17B
7 fila7A fila7B
17 fila17A fila17B
Ya vuelvo a estar con los registros duplicados.
Al ser un procedimiento almacenado, ya no sé si descartar que sea problema de java... Si pueden echarme una mano para evitar registros duplicados...
Por último añado que con PHP, que lo tengo bastante por la mano, no he tenido ningún problema con esta misma consulta.
Gracias y un saludo!
Carles