2016-12-20 5 views
0

J'ai essayé d'utiliser l'extension Yii-Sphinx et son fonctionnement correct lorsque j'ai utilisé une requête simple mais quand j'essaye d'utiliser la jointure gauche, cela ne fonctionne pas. Il renvoie l'erreur ci-dessous. J'ai testé de nombreuses requêtes mais ne fonctionne pas. J'utilise l'extension Yii-SphinxYii2 Sphinx Left join ne fonctionne pas

SQLSTATE[42000]: Syntax error or access violation: 1064 sphinxql: syntax 
error, unexpected IDENT, expecting $end near 'LEFT JOIN specs ON specs.id = 
listing.specs_id' 
The SQL being executed was: SELECT specs.id, listing.title,listing.specs_id,  
listing.reg_no, listing.price, listing.status, listing.featured FROM listing 
LEFT JOIN specs ON specs.id = listing.specs_id 
Error Info: Array 
(
    [0] => 42000 
    [1] => 1064 
    [2] => sphinxql: syntax error, unexpected IDENT, expecting $end near 
    'LEFT JOIN specs ON specs.id = listing.specs_id' 
) 

voici ma requête

SELECT specs.id, listing.title,listing.specs_id, listing.reg_no, listing.price, listing.status, listing.featured FROM listing LEFT JOIN specs ON specs.id = listing.specs_id 
+0

Ajoutez-vous réellement \ dans cette requête? – Bizley

+0

Vérifiez ma question maintenant. J'ai ajouté une mauvaise requête. S'il vous plaît vérifier maintenant @Bizley –

+0

Quelle version de Sphinx (pas yii2-sphinx) avez-vous? – Bizley

Répondre

1

J'ai résolu ce problème. Voici le détail pour tous ceux qui sont coincés dans un tel problème. Voici ma solution avec le constructeur de requête sphynx disponible en extension yii2-sphynx:

$q = new Query(); 
$q->from('listing'); 
$rows = $q->all(); 

« Répertoire » est l'index du fichier de configuration sphynx, requête de jointure peut être écrit dans sql_query

Ce que je faisais mal que j'utilisais la requête simple plutôt que le constructeur de requête et cela a résolu le problème. Par exemple, la requête de jointure ne fonctionnera pas avec le code ci-dessous.

$sql = 'Select * FROM listing'; 
$rows = Yii::$app->sphinx->createCommand($sql)->queryAll(); 

Une requête simple sera exécutée mais la requête avec n'importe quelle jointure retournera une erreur.

0

SphinxSearch lui-même ne prend pas en charge « JOIN de. Il ne peut pas exécuter de telles requêtes.

Pas un problème avec yii2-sphinx en tant que tel, son fonctionnement Sphinx.

Si l'écriture SphinxQL interroge directement, peut lire la syntaxe SELECT ici: http://sphinxsearch.com/docs/current.html#sphinxql-select

instruction SELECT a été introduit dans la version 0.9.9-RC2. Sa syntaxe est basée sur le SQL normal, mais ajoute plusieurs extensions spécifiques à Sphinx et comporte quelques omissions (comme le support (actuellement) manquant pour JOINs).

En usage général QueryBuilder http://www.yiiframework.com/doc-2.0/yii-sphinx-querybuilder.html comme il le seul méthodes 'offres soutenues par actully Sphinx.

+0

Je l'ai eu en utilisant Query Builder $ q = new Query(); –