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

MySQL liczy złożone wyniki zapytań?

Twój problem polega na tym, że Twoje zapytanie nie zwraca tego, co myślisz, że zwraca (zawsze pomaga uruchomić je samodzielnie, aby sprawdzić, czy zestaw wyników jest zgodny z oczekiwaniami).

Dobrze, podzielmy to.

Próbujesz policzyć wszystkie posty, które nie mieć pasujący rekord w tabeli taksówek dla tego identyfikatora użytkownika. Tutaj chcesz JOIN tabele i pobierz te wiersze w post które normalnie byłyby wykluczone przez złączenie. Osiąga się to przez lewe sprzężenie zewnętrzne

(edytowany )

SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL

To HAVING klauzula mówi:tylko te wiersze w zestawie wyników, które nie miały odpowiadającego t.taxiID.

Jeśli uruchomisz to zapytanie i otrzymasz oczekiwany zestaw wierszy (posty, które nie mają polubień lub niechęci tego użytkownika) WTEDY możesz dodać zewnętrzne zapytanie, aby policzyć liczbę zwróconych wierszy:

SELECT COUNT(*) as count FROM (
    SELECT p.ID, t.taxiID
    FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
    HAVING t.taxiID IS NULL
) a

Powinno to zwrócić pojedynczy skalar o nazwie count. W takim przypadku będziesz mógł powiedzieć:

if ($count[0]->count > 10) { blah blah blah }

(druga edycja ) To wewnętrzne zapytanie dostanie te posty, które mają wartość =1 w tabeli taksówek lub w ogóle nie mają wartości, co skutkuje zwróceniem 4 dla twojego przykładu:

SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw „ERROR 3942 (HY000):Każdy wiersz klauzuli VALUES musi mieć co najmniej jedną kolumnę” podczas korzystania z instrukcji VALUES w MySQL

  2. Wygeneruj sekwencję liczb całkowitych w MySQL

  3. Uszkodzenie bazy danych przez MariaDB :Tabela nie istnieje w silniku

  4. Jak wykryć, że transakcja została już rozpoczęta?

  5. Najlepszy sposób na zachowanie unikatowości pola TEKSTOWEGO w bazie danych MySQL