Ich habe folgende Tabellen in meiner db:Elixir/Phoenix Abfrage inkl Menge
schema "foods" do
field :name, :string
has_many :order_items, MyApp.OrderItem
end
schema "order_items" do
field :quantity, :integer, default: 1
field :price, :integer
belongs_to :food, MyApp.Food
Auftragspositionen hält die food_id sowie Menge. Jetzt versuche ich eine Abfrage zu erstellen, die zeigt, wie viel jedes Lebensmittel bestellt wurde. Dies ist, was ich bisher:
fooditems = Repo.all(from p in OrderItem, join: f in Food, on: p.food_id == f.id,
group_by: f.name, select: {f.name, count(p.id)}, order_by: count(p.id))
Grundsätzlich habe ich zwei Fragen: 1) Wie kann ich Mengenfeld (von Auftragsposition Tabelle) machen auch in der Abfrage zählen aufgenommen werden? Wenn zum Beispiel die Menge 2 ist, zählt count() nur als 1, also wie kann ich den count() nicht nur nach id zählen, sondern auch die Menge (aus der Bestellpositionstabelle) , Mengenfeld)?
Darüber hinaus bin ich nicht sicher, wie Sie die Abfrage aus dem HTML aufrufen. Ich habe versucht,
<%= for item <- @fooditems do %>
<tr>
<td><%= item.name %></td>
</tr>
<% end %>
Aber es gibt Argument Fehler, so dass ich glaube, ich bin es nur mit item.name die falsche Art und Weise aufrufen. Im Allgemeinen möchte ich eine Tabelle haben, die Nahrungsmittelnamen und die jeweilige Quantität auflistet (von order_item Tabelle, einschließlich Quantitätsfeld).
Dank
Danke dogbert! Also, ich hätte einfach die Summe() für die Berechnung der Menge anstelle der Zählung verwenden sollen. Was die Tupel anbelangt, sehe ich, was ich falsch gemacht habe, ich werde Ihrem Vorschlag folgen und stattdessen eine Karte verwenden! – Ilya
Ja, "count" würde die Anzahl der Aufträge zurückgeben, während "sum (quantity)" alle Mengen dieser Aufträge aufaddiert. – Dogbert