These days, the development of smart cities, specifically in location-aware, latency-sensitive, and security-crucial applications (such as emergency fire events, patient health monitoring, or real-time manufacturing), heavily depends on more advanced computing paradigms to address these requirements. In this regard, fog computing, a robust cloud computing complement, plays a preponderant role by virtue of locating closer to the end-devices. Nonetheless, utilized approaches in smart cities are frequently cloud-based, which causes not only the security and time-sensitive services to suffer but also its flexibility and reliability to be restricted. In order to obviate the limitations of cloud and other related computing paradigms such as edge computing, this paper proposes a study for the state-of-the-art fog-based approaches in smart cities. Furthermore, according to the reviewed research content, a classification is proposed that falls into three classes: service-based, resource-based, and application -based. This study also investigates the evaluation factors, used tools, evaluation methods, merits, and demerits of each class. Types of proposed algorithms in each class are mentioned as well. Above all else, by taking various perspectives into account, comprehensive and distinctive open issues and challenges are provided via classifying future trends and issues into practical sub-classes.