Dies würde es tun:
SELECT *, LENGTH(Ingredients) - LENGTH(REPLACE(Ingredients, '\n', '')) as Count
FROM Recipes
ORDER BY Count DESC
Die Art, wie ich die Menge von Zeilenumbrüchen bin immer ein bisschen wie ein Hack ist, aber, und ich glaube nicht, dass es einen Weg gibt, besser . Ich würde empfehlen, eine Spalte mit Zeilenumbrüchen zu behalten, wenn die Leistung ein großes Problem darstellt. Für mittelgroße Datenmengen sollte das oben genannte jedoch in Ordnung sein.
Wenn Sie einen Cache-Spalte, wie oben beschrieben haben wollten, würden Sie tun:
UPDATE
Recipes
SET
IngredientAmount = LENGTH(Ingredients) - LENGTH(REPLACE(Ingredients, '\n', ''))
Danach, wann immer Sie aktualisieren/eine neue Zeile einzufügen, könnten Sie die Beträge berechnen (wahrscheinlich mit PHP) und füllen Sie diese Spalte vorher aus. Oder, wenn Sie in dieser Art von Sache sind, versuchen Sie triggers.
Wenn Sie Schreibzugriff auf dieselbe Datenbank haben, können Sie eine temporäre Tabelle erstellen, um die Anzahl der Zeilenumbrüche für jeden Datensatz und jede Schleife in einer gespeicherten Prozedur oder den PHP-Code selbst zu speichern. die Tabelle würde nur eine Spalte für die Datensatz-ID enthalten, und Sie werden in den Inhalt dieser Tabelle Schleife und scannen alle \ n in Frage, und bei jedem Treffer Sie einen weiteren Eintrag einfügen müssen Sie dann ein schreiben Abfrage wie diese Wählen Sie Anzahl (1), Record_id von Temp_Table-Gruppe von Record_ID; Ich denke, –