Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL zawierający wartości dla dat z zerową liczbą pozycji

EDYTOWANO W CELU POPRAWIANIA ODPOWIEDZI:

http://sqlfiddle.com/#!2/ae665/4

SELECT date_format(datefield,'%Y-%m-%d') AS DATE, IFNULL(counts, 0), item_id FROM 
    dates a
LEFT JOIN 
    (SELECT COUNT(*) as counts, purchase_date,user_id,item_id 
     FROM items_purchased 
     WHERE item_id=1
     GROUP BY date(purchase_date),item_id )r 
ON date(a.datefield) = date(r.purchase_date) ;

Powyższe zapytanie opiera się na założeniu:

AKTUALIZACJA autorstwa @timpeterson (OP)Główne podziękowania dla @Sel. Oto sqlfiddles przedstawiające oba zapytania, które mnie interesują:

  1. Zakupy/dzień dla wszystkich elementów należących do jednego użytkownika (np. user_id=11 ):http://sqlfiddle.com/#!2/76c00/3
  2. Zakupy/dzień dla item_id=1 którego właścicielem jest user_id=11 :http://sqlfiddle.com/#!2/76c00/1

oto kod SQL dla drugiego na wypadek, gdyby link został w jakiś sposób uszkodzony:

SELECT date_format(datefield,'%Y-%m-%d') AS DATE, 
IFNULL(countItem, 0), item_id
FROM dates a
LEFT JOIN 
(SELECT countItem, purchase_date,i.user_id,p.item_id FROM (
   SELECT count(*) as countItem, purchase_date,user_id,item_id 
   FROM items_purchased 
   GROUP BY date(purchase_date),item_id
   ) p 
 inner join items i
 on i.item_id=p.item_id
 WHERE p.item_id='1' and i.user_id='11' //just get rid of "p.item_id='1'" to produce the 1st query result
)r 
ON date(a.datefield) = date(r.purchase_date);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql:wybierz najczęściej głosowane elementy od każdego użytkownika

  2. Mysql nie może wybrać rekordu w tabeli

  3. Funkcja MySQL SUM w wielu sprzężeniach

  4. Sortowanie PHP z danych serializowanych

  5. Błąd PDO — wyjątek PDO” z komunikatem „SQLSTATE[HY000]:błąd ogólny”