Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Problem z zapytaniami
24godzina
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
24godzina
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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.

Ten post edytował 24godzina 18.12.2015, 20:39:24
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
24godzina
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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ść.
Go to the top of the page
+Quote Post
castagir
post
Post #6





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


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

Ten post edytował castagir 19.12.2015, 17:42:52
Go to the top of the page
+Quote Post
24godzina
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował 24godzina 20.12.2015, 11:04:48
Go to the top of the page
+Quote Post
patwoj98
post
Post #8





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
24godzina
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Wstaw alias i się przekonaj. COUNT() AS ilosc


--------------------
Go to the top of the page
+Quote Post
castagir
post
Post #11





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
24godzina
post
Post #12





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
castagir
post
Post #13





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


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.

Ten post edytował castagir 22.12.2015, 18:59:30
Go to the top of the page
+Quote Post
24godzina
post
Post #14





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
com
post
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


myślę, że to pomoże
https://thingsilearn.wordpress.com/2008/02/...regexp-vs-like/
Go to the top of the page
+Quote Post
castagir
post
Post #16





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Jeżeli chcesz coś wyszukać na podstawie jakiegoś parametru nie używaj LIKE tylko operatorów.

Ten post edytował castagir 23.12.2015, 09:48:57
Go to the top of the page
+Quote Post
24godzina
post
Post #17





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 18.12.2015

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
castagir
post
Post #18





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
aniolekx
post
Post #19





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
luck
post
Post #20





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:58