2013-04-29 5 views
0

J'ai un problème avec mysql's locate.Mysql locate, avec plusieurs lignes

Mon tableau test ressemble à ceci:

rang => Type

id => int
data => string

Lorsque je tente d'exécuter SELECT LOCATE("searchString", (SELECT data FROM Test LIMIT 2))

I obtient toujours 'La sous-requête renvoie plus d'une ligne'.

Comment puis-je résoudre ce problème? Je veux juste sélectionner toutes les lignes où ma chaîne de recherche fait partie de la ligne de données. Est-il même possible de le faire avec mysql?

MISE À JOUR:

Ceci est juste un sous-requête. La requête de trou ressemblera à quelque chose comme ça:

SELECT * FROM anamnese WHERE STRCMP("01.01.2012", (SELECT SUBSTRING(
               FROM (SELECT LOCATE ...) 
               FOR (SELECT LOACTE ....)+10) 
           = 0 

donc je dois rechercher une date dans une chaîne de caractères qui sont stroed dans la base de données. Et je ne peux rien changer sur la base de données!

+0

Pourquoi vous ne savez pas quel champ votre date sera? –

Répondre

0

Utilisez une requête LIKE. Ceci renverra toutes les lignes où la colonne data contient le mot « searchString »:

SELECT `data` FROM `test` WHERE `data` LIKE '%searchString%'; 
+0

OUI, mais cette partie de la requête n'est qu'une sous-requête. Je dois chercher la corde et après je dois la comparer. Alors 'LIKE' n'est pas une option pour moi. – samsemilia7

+0

@ samsemilia7 Voulez-vous élaborer? Que comparez-vous? –

+0

juste mis à jour ma question.Espérons c'est compréhensible: D – samsemilia7

0

LOCATE(substr, string)

Si vous voulez que le travail, vous devez mettre « LIMIT 1 » au lieu de « LIMITE 2 » votre requête.

De toute façon, je suppose que ce n'est pas ce que vous cherchez.

Source: MySQL docs

+0

merci pour la relecture, mais je sais que cela fonctionne avec LIMIT 1. Mon problème est, que faire quand il y a plusieurs lignes – samsemilia7