Lehre : wie Ersetzen-Funktion

Brauche ich Eure Hilfe, Baue meine Abfrage mit der Lehre. Ich bin eine symfony-Anfänger.
Zunächst baute ich meine Abfrage in MySQL-SQL-tab und es funktioniert Prima.

SELECT * 
FROM contact
WHERE insee like '03%'
ORDER BY (LENGTH(tif) - LENGTH(REPLACE(tif,";",""))) DESC

To be more precise, my tif field looks like that : 
1 - 01.02.01.02;01.02.03.04;01.05.06 (3 subsets)
2 - 01.02.03.08.07.01.02.03.08.0701.02.03.08.07; (1 subset)
3 - 01.02.01;02.06.05 (2 subsets) 

Ich brauche, um die Anzahl der codes, die order by desc, um so die Reihenfolge 1,3,2.

Nun habe ich versucht, es zu bauen, in meiner repository-Klasse auf Symfony
Ich fand heraus, dass die replace-Funktion existiert nicht bei der Lehre, also versuchte ich Rock es tun, was folgt :

$qb = $this->getEntityManager()
            ->createQueryBuilder()
            ->select('c')
            ->from('SgaContactBundle:Contact', 'c')
            ->where('c.insee LIKE :insee')
            ->setParameter('insee', '%' . $insee . '%');

$qb->orderBy($qb->expr()->diff(
            $qb->expr()->length('c.tif'), 
            $qb->expr()->length(preg_match_all('/;/i', 'c.tif')) ),
            'DESC');
return $qb->getQuery()
          ->getResult();

Schließlich habe ich diese Fehlermeldung :

 [Syntax Error] line 0, col 99: Error: Expected StateFieldPathExpression | string | 
 InputParameter | FunctionsReturningStrings | AggregateExpression, got '0'

Was kann ich tun, um Sie zu ersetzen "Ersetzen-Funktion" ?
Ich habe versucht, preg_replace, preg_match und schließlich preg_match_all aber etwas geht schief.

Danke für Eure Hilfe Jungs

  • Ich verstehe nicht, warum ORDER BY X DESC mit X eine ganze Zahl ist okay, da X soll ein Feld ? Können Sie uns ein Beispiel geben von dem, was c.tif aussieht und was erwarten Sie von Ihrem ORDER BY (...) Ausdruck zu tun ?
  • Ich bearbeitet meine post. Es tut mir Leid ... Wie ich oben schrieb, meine tif-Feld sieht aus wie das : 1 - 01.02.01.02;01.02.03.04;01.05.06 (3 Teilmengen) 2 - 01.02.03.08.07.01.02.03.08.0701.02.03.08.07; (1 Teilsatz) 3 - 01.02.01;02.06.05 (2 Untergruppen)
  • Okay ich habe es, danke! Sie könnte erwägen, eine zusätzliche Spalte mit der Anzahl der Teilmenge für jede tif Feld. So Sortieren Sie Ihr Ergebnis leichter ! Aber ich bin nicht sicher, dies ist eine gute übung... Lassen Sie mich überprüfen Sie die anderen Optionen
InformationsquelleAutor scamp | 2014-05-23
Schreibe einen Kommentar