Domanda

Sto tentando di restituire il numero di clienti che si trovano in uno stato specifico che hanno noleggiato un film specifico, dove il tavolo affitti contiene due colonne, una per ID cliente e uno per l'ID di film. La funzione prende in un ID di film e lo stato e restituisce un intero con la quantità di clienti.

In questo momento ho un'implementazione, ma conta la quantità di righe l'intero restituisce la query:

SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID

E poi io reputo la quantità di righe. Vorrei solo essere in grado di controllare numCustomers per i dati corretti. Grazie!

È stato utile?

Soluzione

In primo luogo, vi manca una clausola per collegare il tuo tavolo affitti e il vostro tavolo cliente su CustomerId?

In secondo luogo, è necessario utilizzare l'INNER JOIN funzionalità nella clausola FROM per aggiungere i due tabelle.

In terzo luogo, si dovrebbe costruire la vostra NON SQL come una stringa come questa come si sarà aperto a SQL Injection.

A occhio e croce, il tipo di SQL si può essere dopo è la seguente.

DECLARE @movieId int
DECLARE @state varchar(2)

SET @movieId = 12345
SET @state = 'NY'

SELECT
    COUNT(DISTINCT C.CustomerID) as numCustomers
FROM
    CUSTOMER C
INNER JOIN
    RENTS R
ON
    C.CustomerID = R.CustomerId
WHERE
    C.ST = @state
AND
    R.mid = @movieId

Altri suggerimenti

Indovinare qualcosa circa lo schema (come AFFITTI riferisce a CLIENTE):

SELECT COUNT(*) as numCustomers
FROM CUSTOMER c
WHERE
    c.ST = @State
    AND EXISTS
    (
        SELECT *
        FROM RENTS r
        WHERE r.CustomerID = c.CustomerID
        AND r.mid = @movieID
    )

Inoltre, si dovrebbe ricerca attacchi di SQL injection, se non sei già familiarità con questo argomento.

È necessario collegare il Cliente e le tabelle di noleggio altrimenti si otterrà una voce per ogni voce ogni tabella.

Come su: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' R.mid = " + movieID <=>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top