2017-09-22 4 views
0

J'ai une réponse API d'eBay sur un categoryName à savoir: "E liquides & E Cig Cartridges" Le problème est, je ne peux pas chercher "E" ramènerait trop de résultats sur ma propre liste de catégories, donc je devrais scanner la phrase pour des mots plus grands que 3 lettres ou même 4, je dois chercher chaque mot puis chercher ma propre liste de catégories pour voir laquelle correspond le mieux à la phrase inconnue du Appel API et définir la catégorie à la meilleure correspondance, je ne suis pas un assistant sql d'où ma question. J'imagine un créer une fonction SQL temporaire puis boucle jusqu'à ce qu'un résultat soit trouvé. Merci d'avance pour toute aide.sql requête pour diviser une phrase et rechercher un résultat sur chaque mot

+0

Vous ne pouvez pas le faire facilement dans SQL, diviser la chaîne en PHP. – Barmar

+0

Oui, merci, je vais donner il ya, seul problème est f ma requête renvoie 6 résultats, lequel alors? supposons que son choix d'utilisateur plus de mise en œuvre .. thxs – smashit

Répondre

0

est ici un moyen d'y arriver:

/* 
CREATE TABLE testData(result INT, term CHAR(255)); 
INSERT INTO testData VALUES 
    (1, 'Cig'), 
    (2, 'Liquids'), 
    (3, 'E'); 
*/ 

SET @NGram = 'E Liquids & E Cig Cartridges'; 

DELIMITER $ 

DROP PROCEDURE IF EXISTS parseNGram$ 

CREATE PROCEDURE parseNGram(VNGram TEXT) 
BEGIN 

    DECLARE VN, VLoopPos, VGramLength INTEGER; 
    DECLARE VGram CHAR(255); 

    SET VN = CHAR_LENGTH(VNGram) - CHAR_LENGTH(REPLACE(VNGram, ' ', '')) + 1; 
    SET VLoopPos = 0; 

    searchLoop: WHILE VLoopPos < VN DO 

     SET VGramLength = LOCATE(' ', VNGram); 
     SET VGram = LEFT(VNGram, VGRamLength); 
     SET VNGram = RIGHT(VNGram, CHAR_LENGTH(VNGram) - VGramLength); 

     IF CHAR_LENGTH(VGram) > 1 THEN 

      # Do someting with the required token, here is an example 
      SELECT result FROM testData WHERE term = VGram LIMIT 1; 
      LEAVE searchLoop; 
     END IF; 

    END WHILE; 

END$ 

DELIMITER ; 

CALL parseNGram(@NGram); 

Laissez-moi savoir si je raté quelque chose,

Cordialement,

James

+0

cela fonctionnerait-il dans MySQL en utilisant php? mon appel actuel utilise pdo $ stmt = $ pdo-> query ("SELECT AUTO_INCREMENT comme id FROM information_schema.tables WHERE nom_table = 'listings'"); – smashit

+0

Cette requête est exécutable mais je ne vois pas comment cela correspond à votre question. Comme Barmar souligne que ce problème pourrait probablement être plus facilement manipulé en utilisant PHP mais comme la question posée pour une solution MySQL j'ai donné la réponse ci-dessus. Si vous avez besoin d'une réponse orientée PHP, je suggère de reposter. –

+1

Oui probablement sur compliqué pour mes besoins, je vais voir ce que je peux faire exploser la phrase et utiliser PHP comme vous l'avez dit. Je vous remercie – smashit