Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniami
Forum PHP.pl > Forum > Przedszkole
24godzina
Chciałabym aby database zliczył mi ile w danym mieście mieszka osób, robię to tak :
SELECT miasto,COUNT(miasto)
FROM klienci
GROUP BY miasto;

Cały czas jest jakiś problem.

Również próbowałam zliczyć ile jest rodzajów książek
w sensie wersja papierowa, wersja elektroniczna
SELECT COUNT(*)
FROM ksiazki
GROUP BY Forma;
Nagłówek w bazie to wlaśnie forma
nospor
Nie: SELECT miasto,COUNT(miasto)
a: SELECT miasto,COUNT(idklienta)

A na przyszlosc jak masz problem/blad to pisz na czym on polega a nie kazesz nam wrozyc
24godzina
Cały czas pokazuje mi się błąd, ze w 1 linijce coś jest nie tak.
Ja po prostu chciałabym wyróżnić miasta i ilośc osób mieszkających w nich.

File or directory does not exist.
nospor
przeciez ten blad nie ma nic wspolnego z zapytaniem.... czytasz w ogole te komunikaty questionmark.gif Pokaz lepiej caly kod, DOKLADNY komunikat bledy, i w skaz wyraznie linie, ktorej dotyczy

ps: przenosze
24godzina
Komunikat:
Invalid fiels descriptor
File or direcrory does not exist
File : C...
Table does not exist

Na zołto zaznacza mi linijkę pierwszą .
SELECT Miasto, COUNT(*) AS LiczbaKlientow
FROM "klienci.dbf"
GROUP BY Miasto


Pierwszy raz robię te zapytania, więc prosze o wyrozumiałość.
castagir
Trochę dziwnie formułujesz to pytanie.
Nie podajesz żadnych parametrów na podstawie których ma MYSQL wyszukać odpowiednie wpisy i je policzyć.

Ja bym to napisał tak:
  1. SELECT miasto, COUNT(*) FROM `klienci.dbf` WHERE miasto=*nazwaMiasta*;


*nazwaMiasta* - zamiast tego fragmentu wpisujesz sobie nazwę właściwą. Tylko nie ubieraj jej w te gwiazdki smile.gif
24godzina
Nie działa, podkreśla mi błąd w 3 linijce. Nie rozumiem czemu.
Nie podoba mu się TOKEN :*nazwaMiasta*;

Czy jest możliwość, że on nie widzi tych baz? czy jak?
patwoj98
To sprawdź czy widzi i będziesz miał odpowiedź. Zrób samo select.
Ja bym przerobił to Twoje zapytanie i zrobił
Kod
SELECT DISTINCT(`miasto`), COUNT(`miasto`) AS mieszkancy FROM `klienci` GROUP BY `miasto`;

ewentualnie istnieje możliwość rozdzielenia tego na dwa zapytania:
Kod
SELECT DISTINCT(`miasto`) FROM `klienci` GROUP BY `miasto`

i teraz dla każdego miasta wyciągać w pętli liczbę mieszkańców.
Wiem, że drugi sposób nieefektywny, ale może zadziała?
24godzina
Jak robię zapytania np. wypisz imona zaczynające się na literę A lub C, to mi je wypisuje, gdy juz chciałam z ciągu [a-g] to juz nie.
Czy jest mozliowść, ze program nie czyta jakims cudem polecenia COUNT?
viking
Wstaw alias i się przekonaj. COUNT() AS ilosc
castagir
Nie wpisuj do SELECT nazwy żadnej kolumny, tylko wpisz po prostu COUNT(*).

Wpisz dokładnie tak jak tutaj podam, tylko zmień nazwę tablicy i miasta:
  1. SELECT COUNT(*) FROM `uzytkownicy` WHERE miasto='lublin'

To zapytanie u mnie działało bez problemu, więc i u Ciebie powinno.
Pamiętaj także o odpowiednich nawiasach. Nazwy tablic, kolumn szukanych, edytowanych zawsze wpisuj w akcentach słabych, a parametry w apostrofach pojedyńczych.
24godzina
Tez mi nie działa, czyli musze mieć jakiś problem z programem.
Ponieważ próbuje zrobić takie zapytanie, które zliczy mi miasta i zwróci ich wartośc

SELECT MIASTO ,COUNT(*) AS LICZBAMIAST
FROM klienci.dbf
GROUP BY MIASTO

Nie działa, a chyba nie jest to jakieś skomplikowane zapytanie, zeby nie działało.

Mam wlaśnie bazę o nazwie klienci, w której jest kolumna o nazwie miasto, to chyba powinno działać,a tu jednak nie działa
castagir
Niemożliwe, żeby nie działało. Założyłem teraz dokładnie taką samą tablicę z taką kolumną, wpisałem 10 pozycji z kilkoma powtarzającymi się miastami i bez problemu mi je wyszukuję, gdy używam swojego zapytania, które podałem wyżej.
Jeżeli chcesz żeby zliczyło i jednocześnie zwróciło wartości tych wierszy z tabeli, to chyba łatwiej po prostu pobrać wszystkie wiersze zgadzające się z parametrem `miasto`='nazwaMiasta', a dopiero w PHP sobie policzyć ich liczbę za pomocą:
  1. $liczbaMiast = count($wynik);

Zmienna $wynik to oczywiście tablica do której zapisujesz wyniki z zapytania do bazy danych o klientów, którzy mieszkają w danym mieście.
Tak będzie szybciej wykonana cala operacja i łatwiej taki kod konserwować.

A jeżeli chcesz, żeby ci zliczyło wszystkie możliwości z tabeli 'miasto', to najlepiej będzie po prostu:
  1. SELECT `miasto` FROM `klienci`

Potem założyć tablicę, która zapisze wszystkie możliwości do niej, tak aby nie powtarzały się, a na końcu dzięki funkcji count() obliczysz sobie liczbę wszystkich możliwości, które przechowywane są w tejże tablicy.
24godzina
Już doszlam. Działa smile.gif
A teraz mam pytanko jak bym chciała wypisać imiona z ciągu liter od a do g

SELECT imie
FROM klient.db
WHERE imie LIKE'[A-G%]';

Wyświetla mi pusta kolumne, Tylko w wyniku jest sam nagłowek w postaci imię.Czego tutaj brakuje, coś pominełam?
com
myślę, że to pomoże
https://thingsilearn.wordpress.com/2008/02/...regexp-vs-like/
castagir
Jeżeli chcesz coś wyszukać na podstawie jakiegoś parametru nie używaj LIKE tylko operatorów.
24godzina
Samo w sobie zapytanie bez zaokrąglenia działa:
SELECT AVG(Kwota) AS Srednia , MAX(Kwota) - MIN(Kwota) As Roznica
FROM zamowienia.db
ORDER BY SREDNIA, Roznica

, gdy dodaje ROUND :

SELECT ROUND(AVG(Kwota)) AS Srednia AVG(Kwota) AS Srednia , MAX(Kwota) - MIN(Kwota) As Roznica
FROM zamowienia.db
ORDER BY SREDNIA, Roznica

Wyskakuje:

Kmunikat:
INVALID use of keyword
Token : AVG(Kwota)
LINE NuMBER: 1

W bazie danych zamowienia.db
mam
NR_ID, Data zamowienia, Kwota, Forma_Zakupu, Forma_dostawy, Rodzaj_platnosci
Wszystkie dane są tutaj przykladowe wymyslane.

castagir
Wymagasz zbyt wiele od MySQL.
Jeżeli chcesz jeszcze operować na wynikach - tworzyć jakieś średnie, zaokrąglać itp, to lepiej zostaw te wszystkie operacje dla PHP.
PHP jest stworzone do tego aby wykonywać skomplikowane obliczenia i algorytmy. MySQL jest tylko przechowalnią danych.
Po prostu pobierz co jest Tobie potrzebne i resztę wykonaj w PHP.
Uwierz, że taki sposób, nie dość, że zajmie serwerowi mniej czasu to jeszcze kod będzie bardziej przejrzysty.
aniolekx
Cytat(24godzina @ 23.12.2015, 19:53:16 ) *
SELECT ROUND(AVG(Kwota)) AS Srednia AVG(Kwota) AS Srednia , MAX(Kwota) - MIN(Kwota) As Roznica
FROM zamowienia.db
ORDER BY SREDNIA, Roznica


tam brakuje przecinka po srednia, czy to tylko twoja niechlujnosc przy przpeisywaniu? Pozatym BBCode na forum obsluguje sql...
luck
Cytat(castagir @ 24.12.2015, 08:55:40 ) *
Wymagasz zbyt wiele od MySQL.
Jeżeli chcesz jeszcze operować na wynikach - tworzyć jakieś średnie, zaokrąglać itp, to lepiej zostaw te wszystkie operacje dla PHP.
PHP jest stworzone do tego aby wykonywać skomplikowane obliczenia i algorytmy. MySQL jest tylko przechowalnią danych.
Po prostu pobierz co jest Tobie potrzebne i resztę wykonaj w PHP.
Uwierz, że taki sposób, nie dość, że zajmie serwerowi mniej czasu to jeszcze kod będzie bardziej przejrzysty.

Pewnie! Wiemy doskonale, że najlepiej zawsze robić "SELECT * FROM ..." i potem wszystko obrabiać w Pehapie. W końcu nie bez powodu każdy szanujący się programista tak właśnie robi.

@24godzina: Te rozszerzenia .dbf, które pojawiają się w Twoich zapytaniach to mam nadzieję przypadek i rzeczywiście korzystasz z bazy MySQL?
com
luck mam nadzieję, że żartujesz ;>
luck
Cytat(com @ 24.12.2015, 15:01:14 ) *
luck mam nadzieję, że żartujesz ;>

No raczej wink.gif
24godzina
Zapytanie :
SELECT data_zamowienia, COUNT(*),ROUND(AVG(kwota),2) AS SREDNIA
FROM zamowienia.db
GROUP BY data_zamowienia
HAVING AVG(kwota) >= 30



Błąd
Capability not supported.

jest, jak podpowiada wujek Google, (np http://edn.embarcadero.com/article/25183) błędem BDE.Nie wiem jak to naprawić. Ktoś pomoże?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.