Hi David,
ok aber warum willst du das in SQL machen. Oder anders gefragt was möchtest du als Ergebnis bekommen?

Letter |  was_found
-------------------
A      |   1
B      |   0
... etc. Das hier?

Ich würde das doch lieber in php machen:


result=array();

foreach(A,B,C.. as letter){
        result[letter]=find(letter);
}

function find(string letter){
number= SELCET COUNT(*) FROM tx_news_domain_model_news WHERE title LIKE letter%
}

Der Code ist als Idee zu verstehen ;-)

Bis denne, Eike



On 09.04.2013 14:37, David Greiner wrote:
Hi Eike!

Danke für deine Antwort. Ich glaube ich hab mich ein wenig kompliziert 
ausgedrückt.
Zu deinem Punkt 1)
Das ist ja mit Extbase ohne Problem möglich. Z.B. durch $query->like('field', 
$alphafilter.'%');

Zu deinem Punkt 2)
Auch das ist mir bekannt. Trotzdem danke dafür.

Was ich erreichen will, ist eine Ausgabe, die mir sagt, ob es News-Einträge 
gibt die mit A, B, C usw. beginnen, oder nicht.
Ich habe nun eine Query die wahrscheinlich nicht sehr performant ist. Zudem 
wird für jeden Buchstaben eine Query durchgeführt.

-------------------------

SELECT l.`letter` , IF( fc.`first_char` IS NULL , 0, 1 ) AS `was_found`
                 FROM (
                     SELECT 'A' AS `letter`
                     UNION SELECT 'B'
                     UNION SELECT 'C'
                     UNION SELECT 'D'
                     UNION SELECT 'E'
                     UNION SELECT 'F'
                     UNION SELECT 'G'
                     UNION SELECT 'H'
                     UNION SELECT 'I'
                     UNION SELECT 'J'
                     UNION SELECT 'K'
                     UNION SELECT 'L'
                     UNION SELECT 'M'
                     UNION SELECT 'N'
                     UNION SELECT 'O'
                     UNION SELECT 'P'
                     UNION SELECT 'Q'
                     UNION SELECT 'R'
                     UNION SELECT 'S'
                     UNION SELECT 'T'
                     UNION SELECT 'U'
                     UNION SELECT 'V'
                     UNION SELECT 'W'
                     UNION SELECT 'X'
                     UNION SELECT 'Y'
                     UNION SELECT 'Z'
                     )l
                 LEFT JOIN (
                     SELECT x.`first_char`
                     FROM (
                         SELECT REPLACE( REPLACE( REPLACE( UPPER( SUBSTRING( 
`title` , 1, 1 ) ) , 'Ä', 'A' ) , 'Ü', 'U' ) , 'Ö', 'O' ) AS `first_char`
                         FROM tx_news_domain_model_news
                         WHERE `title` IS NOT NULL
                         AND `title` != ''
                     )x
                     WHERE x.`first_char` IS NOT NULL
                     GROUP BY x.`first_char`
                     )fc ON l.`letter` = fc.`first_char` "

---------------------

Gruß, David.


Gesendet: Dienstag, 09. April 2013 um 13:54 Uhr
Von: "Eike Starkmann" <starkm...@undkonsorten.com>
An: "German TYPO3 Userlist" <typo3-german@lists.typo3.org>
Betreff: Re: [TYPO3-german] Alphabetische Filterung von News, DB-Query
Hallo David,

es gibt da im Prinzip zwei Möglichkeiten:

1. Ein eigenes Statement, wie du schon vorgeschlagen hast.
Dann wäre sowas wie SELECT * FROM table WHERE field LIKE a% OR LIKE A%
dein Freund. Nachteil ist, das du nicht mehr FLOW kompatibel bist.

2. Möglichkeit mit Extbase alle Daten hohlen und in ein Array speichern.
$this->defaultQuerySettings->setReturnRawQueryResult(TRUE); Damit
bekommst du eine Array-Ergebnisliste zurück. Auf dieser kannst du dann
arbeiten. Nachteil unnötig großes Array und Query.


Bis denne, Eike





On 09.04.2013 10:34, David Greiner wrote:
Hallo Liste und MySQL-Profis!

Ich sitze gerade vor der Aufgabe, für eine Newsliste (tx_news) eine 
alphabetische Filterung umzusetzen. Die News-Extension entsprechend zu 
erweitern, dass nur noch News ausgegeben werden derer Titel mit einem 
bestimmten Buchstaben beginnen, ist nicht weiter schwer.
Herausfordernder ist es, eine Datenbank-Query zu entwerfen, die überprüft, ob 
die Auswahl eines Buchstabens ein Ergebnis zu erwarten hat oder nicht. Diese 
Query benötige ich, um in der Filteransicht auch nur die jenigen Buchstaben zu 
verlinken, die ein Ergebnis erwarten. Alle anderen sollen ausgegraut sein.

Vermutlich werde ich eine solche Query nicht mit Extbase-Bordmitteln umsetzen können und 
werde auf "$query->statement(...)" zurückgreifen müssen, das ist aber nicht 
schlimm.
Bestenfalls erhalte ich im Result eine temporäre Spalte (z.B. hasResult) die in 
Abhängigkeit vom getesteten Buchstaben eine 1 oder 0 enthält. Somit könnte ich 
beim Rendern der alphabetischen Filterleiste mit Fluid über eine Condition 
entscheiden ob ein Buchstabe aktiv/inaktiv sein soll.

Kann mir jemand eine Query oder eine grobe Richtung dafür vorschlagen?

Viele Grüße, David.
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



--
EIKE STARKMANN
starkm...@undkonsorten.com
+49.30.20236354 [fon]

UNDKONSORTEN GBR
Waldemarstr. 38
10999 Berlin

www.undkonsorten.com[http://www.undkonsorten.com]
+49.30.20236354 [fon]
+49.30.20236354-9 [fax]

thomas alboth, felix althaus + jochen biedermann [gesellschafter]
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german[http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german]
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



--
EIKE STARKMANN
 starkm...@undkonsorten.com
 +49.30.20236354 [fon]

UNDKONSORTEN GBR
 Waldemarstr. 38
 10999 Berlin

 www.undkonsorten.com
 +49.30.20236354 [fon]
 +49.30.20236354-9 [fax]

 thomas alboth, felix althaus + jochen biedermann  [gesellschafter]
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an