none
Kaç ürün satıldığını sorgulama RRS feed

  • Soru

  • Core api geliştirmekteyim. Aşağıda verdiğim gibi tablo yapılarım mevcut. Tablolar arasında ilişkilendirme var.

    Yapmak istediğim sorgu ise şöyle bir şey olacak;

    Orders tablosundan bugünün tarihi ve orderStatusId'si 4 olan bir sorgu

    Buradan gelen order lar OrderItems tablosundan sorgulanacak ve toplamda hangi menuItemId den kaç tane olduğunun miktarını görmek istiyorum

    Kısacası gün sonunda neyden ne kadar sattığımı görmek istiyorum. Nasıl yapabilirim?

    1 Eylül 2020 Salı 12:17

Yanıtlar

  • Oneriyi dikkate alacagini soyluyorsun ama daha arkasindan sordugun ilk soruda dikkate almamissin, hala sadece resim var elimizde :)

    var satislar = db.OrderItems
                     .Where(x => x.Order.Date.Date == DateTime.Today &&
                                 x.Order.OrderStatusId == 4)
                     .GroupBy(x => x.MenuItemId)
                     .Select(x => new {
                        MenuItemId = x.Key,
                        Sayi = x.Count()
                     });
    Not: Linq demissin, Linq genis bir kavram. Ben Linq To SQL ile yazdim. Seninki Linq To EF olabilir, bilmiyorum, DbFunctions.TruncateDate() kullanman gerekebilir.



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.


    • Düzenleyen CetinBasoz 1 Eylül 2020 Salı 12:48
    • Yanıt Olarak İşaretleyen Kenshai 1 Eylül 2020 Salı 13:00
    1 Eylül 2020 Salı 12:46

Tüm Yanıtlar

  • Resim yerine kod verirseniz daha iyi. O zaman ilgilenen olma sansi artar. Ornegin:


    Create Table Orders (orderId int, 
     restId int, 
    ...
    );
    
    insert into orders (orderId, restId, ...)
    values 
    (2002,2, ...),
    (2003,2, ...),
    ...

    gibi. Bunlari tablonuza sag klikle alabilirsiniz (insert kismini en kotu ihtimal text olarak paylasabilirsiniz).

    Resimlerle cok zor oluyor olayi anlayip yazabilmek. Yine de sansimi biraz zorlarsam:

    SELECT
             menuItemId, COUNT(*) AS Sayi
    FROM     OrderItems oi
    WHERE    EXISTS
      (
        SELECT *
        FROM   orders o
        WHERE  o.orderId=oi.orderId
          AND o.OrderStatusId=4
          AND CAST(o.[Date] AS DATE)=CAST(GETDATE() AS DATE)
      )
    GROUP BY menuItemId;



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.


    • Düzenleyen CetinBasoz 1 Eylül 2020 Salı 12:31
    1 Eylül 2020 Salı 12:30
  • Önerinizi dikkate alacağım Çetin hocam teşekkürler. Verdiğiniz örnek çalışıyor. Bunu linq lambda expression'a olarak verebilme şansınız var mı?
    1 Eylül 2020 Salı 12:35
  • Oneriyi dikkate alacagini soyluyorsun ama daha arkasindan sordugun ilk soruda dikkate almamissin, hala sadece resim var elimizde :)

    var satislar = db.OrderItems
                     .Where(x => x.Order.Date.Date == DateTime.Today &&
                                 x.Order.OrderStatusId == 4)
                     .GroupBy(x => x.MenuItemId)
                     .Select(x => new {
                        MenuItemId = x.Key,
                        Sayi = x.Count()
                     });
    Not: Linq demissin, Linq genis bir kavram. Ben Linq To SQL ile yazdim. Seninki Linq To EF olabilir, bilmiyorum, DbFunctions.TruncateDate() kullanman gerekebilir.



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.


    • Düzenleyen CetinBasoz 1 Eylül 2020 Salı 12:48
    • Yanıt Olarak İşaretleyen Kenshai 1 Eylül 2020 Salı 13:00
    1 Eylül 2020 Salı 12:46
  • Verdiğin şekilde çalıştı Çetin hocam teşekkürler. İlk verdiğiniz hali de sql üstünde çalışmadığı için resimleri değiştirme ihtiyacı duymamıştım. Kod olarak vermemi önerdiğiniz şey aşağıda ki gibi tablonun scripti mi? Tam anlayamadım o kısmı

    CREATE TABLE [dbo].[Orders](
    	[orderId] [int] IDENTITY(1,1) NOT NULL,
    	[restId] [int] NULL,
    	[masaNo] [int] NULL,
    	[notes] [nvarchar](255) NULL,
    	[subTotal] [decimal](10, 2) NULL,
    	[date] [datetime] NOT NULL,
    	[orderStatusId] [int] NULL,
     CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
    (
    	[orderId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[Orders]  WITH CHECK ADD  CONSTRAINT [FK_Orders_OrderStatus] FOREIGN KEY([orderStatusId])
    REFERENCES [dbo].[OrderStatus] ([orderStatusId])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_OrderStatus]
    GO
    
    ALTER TABLE [dbo].[Orders]  WITH CHECK ADD  CONSTRAINT [FK_Orders_Restaurants] FOREIGN KEY([restId])
    REFERENCES [dbo].[Restaurants] ([restId])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Restaurants]
    GO

    1 Eylül 2020 Salı 12:58
  • Yaklasmissin. Bu sadece Orders tablosu icin Create script. Buna diger tablolari ekleyip, iclerine de veri koyacak sekilde

    INSERT INto ...

    komutlarini eklersen olacak. Baska bir deyisle, senin kodunu alan, kendi makinesinde bir test database yaratip o scripti calistirabilmeli ve elinde test edebilecegi bir veri seti olmali. Sadece resime bakarak yazilan kodlarda hata sansi daha yuksek.

    Ornegin burada Nihat'in sordugu soru gibi:

    Ornek soru



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.


    • Düzenleyen CetinBasoz 1 Eylül 2020 Salı 13:59
    1 Eylül 2020 Salı 13:56