Ecto -Abfrage in Elixir: Ein Anfängerhandbuch
In diesem Artikel wird Ecto, Elixirs Query -Sprache vorgestellt und Sie durch grundlegende Abfragetechniken führt. Wir werden Joins, Assoziationen, Aggregation und vieles mehr behandeln, um ein grundlegendes Verständnis von Elixier- und ECTO -Grundlagen zu verstehen.
Schlüsselkonzepte:
where
, limit
, offset
und distinct
Ermöglichen Sie eine präzise Datenauswahl. group_by
, having
, count
, avg
, sum
, min
, max
) Aktivieren Sie komplexe Datenberechnungen. Erste Schritte mit der Anwendung ectoing
:
Die Beispiele verwenden die Anwendung ectoing
. Klon, die Datenbank wie folgt einrichten und migrieren:
git clone https://github.com/tpunt/ectoing cd ectoing mix deps.get # Update credentials in config/config.exs mix ecto.create mix ecto.migrate mix run priv/repo/seeds.exs
(MySQL wird hier verwendet; während anpassbar an andere Datenbanken, sind einige spätere Beispiele möglicherweise mySQL-spezifisch.)
Das Datenbankschema:
Grundlegende Abfragen:
Beginnen wir mit einfachen Fragen. Denken Sie daran, Ecto.Query
in der Elixierschale zu importieren (iex -S mix
).
alle Benutzer abrufen:
SQL:
SELECT * FROM users;
ecto (Keyword -Syntax):
query = Ectoing.User Ectoing.Repo.all(query)
ecto (Makrosyntax):
query = Ectoing.User |> Ecto.Query.all() Ectoing.Repo.all(query)
Auswählen spezifischer Felder (FirstName, Nachname):
SQL:
SELECT firstname, surname FROM users;
ecto (Keyword -Syntax):
query = from u in Ectoing.User, select: [u.firstname, u.surname] Ectoing.Repo.all(query)
ecto (Makrosyntax):
query = Ectoing.User |> Ecto.Query.select([u], [u.firstname, u.surname]) Ectoing.Repo.all(query)
Die Ergebnisse sind Listen von Listen, Tupeln oder Karten, abhängig von der Struktur select
Klausel.
Filterung und Anpassen der Ergebnisse:
Verfeinern wir Abfragen, um Datenuntergruppen auszuwählen.
Benutzer mit Nachname "doe" auswählen:
SQL:
SELECT * FROM users WHERE surname = "doe";
ecto (Keyword -Syntax):
surname = "doe" query = from u in Ectoing.User, where: u.surname == ^surname Ectoing.Repo.all(query)
ecto (Makrosyntax):
surname = "doe" query = Ectoing.User |> Ecto.Query.where([u], u.surname == ^surname) Ectoing.Repo.all(query)
Auswahl verschiedener Nachnamen, geordnet und begrenzt:
SQL:
SELECT DISTINCT surname FROM users LIMIT 3 ORDER BY surname;
ecto (Keyword -Syntax):
query = from u in Ectoing.User, select: u.surname, distinct: true, limit: 3, order_by: u.surname Ectoing.Repo.all(query)
ecto (Makrosyntax):
query = Ectoing.User |> Ecto.Query.select([u], u.surname) |> Ecto.Query.distinct(true) |> Ecto.Query.limit(3) |> Ecto.Query.order_by([u], u.surname) Ectoing.Repo.all(query)
Aggregationsfragen:
Ecto unterstützt Aggregationsfunktionen.
Benutzer mit einer durchschnittlichen Freundschaftsbewertung von 4 oder höher finden:
SQL:
SELECT friend_id, avg(friend_rating) AS avg_rating FROM friends GROUP BY friend_id HAVING avg_rating >= 4 ORDER BY avg_rating DESC;
ecto (Keyword -Syntax):
query = from f in Ectoing.Friend, select: %{friend_id: f.friend_id, avg_rating: avg(f.friend_rating)}, group_by: f.friend_id, having: avg(f.friend_rating) >= 4, order_by: [desc: avg(f.friend_rating)] Ectoing.Repo.all(query)
ecto (Makrosyntax): (ähnliche Struktur wie die Schlüsselwortsyntax mit dem Rohroperator)
Schlussfolgerung:
Diese Einführung deckt die Fragen der Abfrage von Ecto ab. Die nächsten Schritte umfassen die Erkundung von Verbindungen, komplexen Abfragen und fortschrittlichen Techniken. Eine umfassende Anleitung finden Sie in der ECTO -Dokumentation.
Das obige ist der detaillierte Inhalt vonVerstehen von Elixirs Ecto -Abfrage DSL: Die Grundlagen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!