Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Hitung produk dari semua subkategori

Jika itu saya, saya akan membuat PROSEDUR TERSIMPAN. Opsi lainnya adalah mengulang dengan PHP melalui kueri pertama, lalu untuk setiap ID jalankan kueri lain - tetapi logika semacam ini dapat memperlambat halaman Anda secara drastis.

Berikut adalah tutorial yang bagus tentang prosedur tersimpan:http://net. tutsplus.com/tutorials/an-introduction-to-stored-procedures/

Pada dasarnya Anda menjalankan loop yang sama yang saya sebutkan di atas dengan PHP (tetapi berjalan lebih cepat). Prosedur disimpan dalam database dan dapat dipanggil seperti fungsi. Hasilnya sama dengan kueri.

Seperti yang diminta, inilah prosedur sampel (atau lebih tepatnya, ini menggunakan dua) dalam contoh saya, "ags_orgs" bertindak dengan cara yang mirip dengan kategori Anda di mana ada parentOrgID. "getChildOrgs" juga bertindak seperti fungsi yang berlebihan karena saya tidak tahu berapa level yang harus saya turunkan (ini ditulis untuk MSSQL - mungkin ada perbedaan dengan mySQL) Sayangnya ini tidak menghitung baris, melainkan mendapat data . Saya sangat merekomendasikan mengikuti satu atau dua tutorial untuk mendapatkan pemahaman yang lebih baik tentang cara kerjanya:

USE [dbname]
GO

/****** Object:  StoredProcedure [dbo].[getChildOrgs]    Script Date: 09/26/2012 15:30:06 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[getChildOrgs]

@myParentID int,
@isActive tinyint = NULL

AS
BEGIN

    SET NOCOUNT ON
    DECLARE @orgID int, @orgName varchar(255), @level int

        DECLARE cur CURSOR LOCAL FOR SELECT orgID FROM dbo.ags_orgs WHERE parentOrgID = @myParentID AND isActive = ISNULL(@isActive, isActive) ORDER BY orderNum, orgName


    OPEN cur
        fetch next from cur into @orgID
    WHILE @@fetch_status = 0
    BEGIN
        INSERT INTO #temp_childOrgs SELECT orgID,orgName,description,parentOrgID,adminID,isActive,@@NESTLEVEL-1 AS level  FROM dbo.ags_orgs WHERE orgID = @orgID

        EXEC getChildOrgs @orgID, @isActive
        -- get next result
        fetch next from cur into @orgID
    END
    CLOSE cur
    DEALLOCATE cur

END

GO

Yang dipanggil oleh proc ini:

USE [dbname]
GO

/****** Object:  StoredProcedure [dbo].[execGetChildOrgs]    Script Date: 09/26/2012 15:29:34 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[execGetChildOrgs]

@parentID int,
@isActive tinyint = NULL,
@showParent tinyint = NULL

AS

BEGIN

CREATE TABLE #temp_childOrgs
(
   orgID int,
   orgName varchar(255),
   description text,
   parentOrgID int,
   adminID int,
   isActive tinyint,
   level int
)
-- if this isn't AGS top level (0), make the first record reflect the requested organization
IF @parentID != 0 AND @showParent = 1
BEGIN
    INSERT INTO #temp_childOrgs SELECT orgID,orgName,description,parentOrgID,adminID,isActive,0 AS level  FROM dbo.ags_orgs WHERE orgID = @parentID
END

exec getChildOrgs @parentID, @isActive

SELECT * FROM #temp_childOrgs
DROP TABLE #temp_childOrgs
END

GO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah jumlah minggu menjadi tanggal?

  2. Pengkodean nilai parameter untuk SELECT di PHP-MySQL

  3. Bagaimana cara menghubungkan database mysql dan memasukkan data ke dalamnya menggunakan kode android

  4. Cara menghilangkan Kesalahan 1329:Tidak ada data - nol baris diambil, dipilih, atau diproses

  5. masukkan satu set data beberapa kali mysql