[PHP] Zliczanie wystąpień z bazy MySQL

Witam!
Mój problem polega na tym że muszę przetworzyć naprawdę spora ilość rekordów z tabeli, szukam takiego rozwiązania by załatwić sprawę jednym zapytaniem inaczej bd musiał zrobić ich 29.

Moje zapytanie wygląda teraz tak “SELECT stacja COUNT(stacja) FROM tabela WHERE wpis > ‘$start’ AND wpis < ‘$stop’ GROUP BY stacja”

Ogólnie rzecz biorąc sortuje te wyniki i chce by wyświetliło mi ilość wystąpień danego stringa, tylko nie wiem teraz jak przetworzyć to zapytanie by wyświetliło mi dane. Być może też źle układam zapytanie do bazy.

Po stacja powinien być przecinek. A tak po za tym nie wiem co chcesz tym zapytaniem uzyskać. Postaraj się napisać to jaśniej.’

Chodzi ci o zapytanie które znajdzie coś w określonym czasie?

Mam 29 maszyn i dla nich chce zliczyć wystąpienia rekordów po kolumnie stacja w danym okresie czasu i to jakoś fajnie wyprintowac w tabelce na przykład. Bo do tej pory robiłem to przez własną funkcje i powtarzałem tyle razy ile mam maszyn ale nie chce bazy obciążać bo i tak ma dość a swoją drogą czekać 20 s na załadowanie strony to tez porażka.

Jakiego typu jest wpis? Sprawdzałeś do testu czy działa bezpośrednio w bazie? Jak nie to sprawdź i jak będzie działało to daj kod php który odpowiada za wyświetlanie tego.

Ps. Zamiast $start wpisz coś na sztywno.

Trochę nie wiem co ty chcesz osiągnąć, daj przykładowe dane i przykładowy wynik jaki chcesz uzyskać.

Mam w tej kolumnie rozpisane nazwy maszyn na zasadzie:
maszyna1
mszyna2
maszyna3
nie są po kolei chce je zgrupować i wyświetlić wystąpienia na zasadzie:
maszyna1 - 150
maszyna2 - 324 itd

SELECT DISTINCT stacja, COUNT(stacja) as amount FROM tabela WHERE twoje_warunki GROUP BY stacja;

Coś w tym stylu. W wyniku będziesz miał 2 kolumny stacja i amount gdzie amount to ilość wystąpień stacji.

  • amount w zapytaniu powinno być zapisane pomiędzy kopniętymi apostrofami, ale jest źle wyświetlane jako kod więc usunąłem

Dobrze, ale widocznie jeszcze mało w PHP wiem bo teraz nie wiem jak wyświetlić te wyniki

Pokaż jak to robisz w obecnej formie.

wcześniej wyświetlałem licznie za pomocą funkcji mysql_fetch_array teraz dostaje tylko liczbę akurat liczbę 9242, tutaj kod:

$z = mysql_query(“SELECT DISTINCT stacja, COUNT(stacja) as `amount` FROM tabela GROUP BY stacja;”);
$x = mysql_fetch_array($z);
echo $x[amount];

Nie masz teraz jednego wiersza a tyle ile stacji. Musisz to zrobić w pętli, przykłady masz w dokumentacji http://php.net/manual/en/function.mysql-fetch-array.php lub http://php.net/manual/en/function.mysql-fetch-assoc.php

Czyli coś w ten deseń (pisane z palca):

while ($row = mysql_fetch_assoc($result)) {
    echo $row['stacja'] + " - " + $row['amount'] 
}

do tego dodałem łamanie linii i wyświetla mi ciągli liczb bez nazw stacji.

Przykład:
9242
7200
8871
24811
142450

Na pewno kolumna z nazwą stacji nazywa się stacja? Zobacz może w bazie danych co Ci zwraca zapytanie może popełniłem gdzieś błąd, albo nazwy się nie zgadzają. Ewentualnie zobacz co dostajesz do skryptu.
Nie jestem w stanie za bardzo Ci pomóc ponieważ nie wiem jak wygląda Twoja baza danych ani skrypt. Nie jestem też w stanie zdebugować za Ciebie problemu? Może dostajesz jakieś errory - nie wiem.

w bazie ok, wynik zapytania w workbench:

[null] 9242
cp102  7200
cp103  8909
cp11   25021
cp12   142563

A tutaj daje pełne zapytanie z wyświetleniem:

$z = mysql_query("SELECT DISTINCT stacja, COUNT(stacja) as `amount` FROM tabela  GROUP BY stacja;");

while ($row = mysql_fetch_assoc($z)) {
echo $row['stacja'] + " - " + $row['amount'];
echo '<br />';

}

  1. Jak nazywają się kolumny w workbenchu?
  2. Czy w bazie są dane bez stacji? Bo w wyniku wygląda to tak jakby tak było, ponieważ w jednym wierszu zamiast nazwy stacji masz null.

Kolejne rzeczy:

  1. W php nie musisz podawać średnika na końcu zapytania, usuń go

  2. dodaj do columny stacja alias może w tedy zacznie działać

    SELECT DISTINCT stacja as stacja, COUNT(stacja) as amount

3.Gdzie zgubiłeś swojego where?

  1. mam id z automatem mam wpis czyli datetime oraz stacja czyli to co przerabiamy, i inne dane jeśli chodzi o użytkownika
  2. tak zdarzają się bo jest to logowanie użytkownika i nie podaje nazwy stacji.

Zrobiłem co pisałeś ale nie przyniosło to skutku po testowałem jeszcze alias by nie był taki sam jak kolumna ale też nic to nie dało.

Dziwne, nie widzę nigdzie błędu w tym co piszesz. Szczerze mówiąc nie mam pomysłu bo dziwne jest to że Ci to nie działa, jedyne co mi przychodzi do głowy to zamiast mysql_fetch_assoc użyć mysql_fetch_row do pobierania wierszy. Nigdy nie używałem assoca zawsze pobierałem fetch_row, wątpię że ma to znaczenie ale wiele dziwnych rzeczy widziałem już w życiu.

Podaj jeszcze na wszelki wypadek wersje phpa na serwerze i spróbuj podmienić sposób wyświetlania na:

while ($row = mysql_fetch_row($z)) {
    echo $row[0] + " - " + $row[1];
    echo '<br />';
}

Problemem może być jeszcze wersja phpa, ogólnie funkcje myql są nieaktualne od wersji 5.5, a w 7.0 porzucone. Od dawna używa się mysqli.

podmiana aliasu nie pomogła, wersja PHP 5.6.30-0+deb8u1

Nie chodzi o alias lecz o sposób obsługi danych przez php. Obawiam się że może to być jakiś pierdołowaty błąd z literówką na czele ponieważ to co masz musi działać, ja raczej bez wglądu w kod i bazę nie jestem w stanie stwierdzić co może być przyczyną jeśli wszystko co do tej pory pisałem sprawdziłeś dobrze.