2013-05-23 14 views
5

mam ustawić skrzypce z tabel i danych hereHrabia jeśli użytkownik osiągnął limit borrwing

Próbuję napisać jeden sql, aby sprawdzić, czy użytkownik osiągnął limit kredytu dla każdej kategorii.

W tej chwili jest to wykonywane przy użyciu różnych instrukcji sql.

Ale sposób, w jaki idzie, jest prosty. Mem i id przechodzą przez kwerendę.

$medId = $_POST['memId']; Using 1 for this example. This is the members Id. 
$id = $_POST['id']; Using 4 for this example. This is the item being lent. 

Po tym zrobić:

select id, holder from collection_db where id = 4 // We have a valid item 

select borrowMax from collection_db where id = (holder from the previous select) and category = 10 //Result = 2. Category indicates its a label and not a borrowable item. 

select count(borrowedId) from lendings where memId = 1 and holder = (holder from the 1st query) //He's borrowed 2, under 1, so cant borrow any more. User 2 may borrow however. 

if (count => borrowMax) {echo 'Cannot borrow more.';} else {echo 'Added to'} 

Jak to może być połączone w jeden SQL lub jest to najlepiej pozostawić w ten sposób?

+1

kogoś używając skrzypce :) – Woot4Moo

+0

+1 na skrzypcach –

Odpowiedz

1

To wydaje się produkować prawidłowy zestaw wyników:

SELECT col1.id, col1.holder, col2.borrowMax, count(lend.borrowedId) as `count` 
FROM collection_db col1 
    INNER JOIN collection_db col2 
    ON col1.holder = col2.id 
    INNER JOIN lendings lend 
    ON col1.holder = lend.holder 
WHERE col1.id = $id 
AND col2.category = 10 
AND lend.memId = $medId 
+0

To jest miły sposób na zrobienie tego. Ale problem polega na tym, że [Zobacz nowe pytanie] (http://stackoverflow.com/questions/16730557/error-handling-in-the-following-sql-query) nie jest w stanie stwierdzić, czy użytkownik nigdy nie głosował, czy też nieważny Podano numer identyfikacyjny. Powiedziałem to w innym pytaniu. Oba zwracają wartość null. Zadałem na to inne pytanie. – jmenezes

0

myślę, że to łączy zapytania:

select max(c.borrowMax) as BorrowMax, COUNT(*) 
from collection_db c join 
    collection_db c1 
    on c.id = c1.holder and c1.id = 4 and c.category = 10 join 
    lendings l 
    on l.holder = c1.holder; 

To czyni założenie, że połączenie między c i c1 nie powoduje zduplikowane wiersze. Ale masz to wymaganie, używając numeru = w pierwotnym zapytaniu (zamiast join).

+0

Dlaczego jesteśmy wybierając max (c.borrowMax). Dlaczego max? Wybieramy opcję borrowMax z kolekcji id_pakietu, gdzie id = (posiadacz z poprzedniego wyboru) i kategoria = 10. Nie będzie innych wierszy, gdy powiesz id = this i category = 10. – jmenezes

+0

Umm ... Wygląda na to, że nie rozumiesz mi dobrze. Muszę sprawdzić z memId i id. – jmenezes

Powiązane problemy