Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL]Problem z pobieraniem i zliczaniem danych.
Marcinekk
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Witam. Mam taki malutki skrypcik:

  1. $_GET['id'] = (int)clear($_GET['id']);
  2. $wynik23=mysql_query("SELECT * FROM users WHERE `Company_Code` = '{$_GET['id']}'");
  3. $result=mysql_fetch_array($wynik23);
  4. $wynik2=mysql_query ("SELECT COUNT(id) AS qnt FROM trasy WHERE `steamid` = '{$result['steamid']}' AND `status` = 'Finished'");
  5. $result2=mysql_fetch_array($wynik2);
  6.  
  7.  
  8. echo 'Trasy: '.$result2[qnt].'';


Ma to działać tak, że z tabeli users_company pobiera mi informacje o użytkownikach spełniających warunek Company_ID = '{$_GET['id']}'. Drugie zapytanie ma zliczać liczbę tras użytkowników spełniających warunek steamid = '{$result['steamid']}'

Niestety pobiera tylko jednego użytkownika, który ma najmniejsze id (spełniającego w/w warunek). Proszę o pomoc.

Ten post edytował Marcinekk 7.12.2016, 08:37:04
Go to the top of the page
+Quote Post
viking
post
Post #2





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

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


fetch array zwraca tablicę. Musisz po niej iterować tworząc np ciąg 1,2,3 który możesz użyć w zapytaniu WHERE steamid IN(twojaTablica)
Go to the top of the page
+Quote Post
kapslokk
post
Post #3





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


1.
  1. $_GET['id'] = (int)clear($_GET['id']);

Nadpisywanie danych w tablicach superglobalnych to zły nawyk.

2. http://php.net/manual/en/function.mysql-connect.php :
Cytat
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0.

3. Pobiera Ci jednego użytkownika, bo nie odbierasz danych w pętli - zajrzyj do manuala
4. Nie potrzebujesz 2 zapytań, możesz zrobić jedno i wykorzystać JOIN. http://dev.mysql.com/doc/refman/5.7/en/join.html
Go to the top of the page
+Quote Post
Marcinekk
post
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Załóżmy, że robię w ten sposób:

  1. $wynik = mysql_query("SELECT COUNT(id) AS qnt FROM jobs WHERE `status` = 'Finished' AND steamid IN(users)")
  2. or die('Błąd zapytania');
  3. if(mysql_num_rows($wynik) > 0) {
  4. while($r = mysql_fetch_assoc($wynik)) {
  5.  
  6. echo ' '.$r['cos'].' ';
  7.  
  8. }
  9. }


Zacznie mi zliczać dla każdego użytkownika i wywalać osobno.
Go to the top of the page
+Quote Post
Kishin
post
Post #5





Grupa: Zarejestrowani
Postów: 148
Pomógł: 17
Dołączył: 20.12.2011

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


Cytat(Marcinekk @ 7.12.2016, 09:03:27 ) *
Załóżmy, że robię w ten sposób:

  1. $wynik = mysql_query("SELECT COUNT(id) AS qnt FROM jobs WHERE `status` = 'Finished' AND steamid IN(users)")
  2. or die('Błąd zapytania');
  3. if(mysql_num_rows($wynik) > 0) {
  4. while($r = mysql_fetch_assoc($wynik)) {
  5.  
  6. echo ' '.$r['cos'].' ';
  7.  
  8. }
  9. }


Zacznie mi zliczać dla każdego użytkownika i wywalać osobno.


to zapytanie zawsze Ci zwróci 1 wynik, musisz po czymś pogrupować, np.:

  1. $wynik = mysql_query("SELECT COUNT(id) as ilosc,status AS qnt FROM jobs WHERE `status` = 'Finished' AND steamid IN(users) group by status")
  2.  

to wyrzuci Ci ilości dla każdego statusu,
wtedy dajesz
  1. while($r = mysql_fetch_assoc($wynik)) {
  2. echo 'status: '.$r['status'].'</br>';
  3. echo 'ilosc: '.$r['ilosc'].'</br></br>';
  4. }
  5.  


Analogicznie sobie wyciągnij co tam potrzebujesz
Go to the top of the page
+Quote Post
Marcinekk
post
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


@up Nie działa to. Błąd zapytania wywala. Ogólnie status nie gra tam jakiejś większej roli, chodzi o to, żeby zliczał te zapytania, które mają status Finished i pasują do wszystkich użytkowników z danej firmy i wtedy ma wyświetlać wszystkie zliczone trasy. Nie dla każdego pojedynczo.

Zrobiłem tak:

  1. $wynik = mysql_query("SELECT COUNT(id) as ilosc,status AS qnt FROM jobs WHERE `status` = 'Finished' AND steamid IN(users) group by status")
  2. or die('Błąd zapytania');
  3. //if(mysql_num_rows($wynik) > 0) {
  4. while($r = mysql_fetch_assoc($wynik)) {
  5. echo 'ilosc: '.$r['ilosc'].'</br></br>';
  6. //}
  7. }


To co jest jako komentarz też próbowałem, nic nie zmieniło.

Ten post edytował Marcinekk 7.12.2016, 14:25:07
Go to the top of the page
+Quote Post
kapslokk
post
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Do IN() można podać wartości rozdzielone przecinkiem, a nie cala tabele - pisałem już, żebyś użył JOIN'a

Go to the top of the page
+Quote Post
Marcinekk
post
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


  1. $wynik = mysql_query("SELECT COUNT(id) as ilosc FROM jobs WHERE `status` = 'Finished' INNER JOIN users ON jobs.steamid=users.steamid;")
  2. or die('Błąd zapytania');
  3. if(mysql_num_rows($wynik) > 0) {
  4. while($r = mysql_fetch_assoc($wynik)) {
  5. echo 'ilosc: '.$r['ilosc'].'</br></br>';
  6. }
  7. }


Zrobiłem w taki sposób, nadal nic to nie dało.
Go to the top of the page
+Quote Post
kapslokk
post
Post #9





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Gdybyś wstawił JOIN'a w odpowiednie miejsce - czyli przed WHERE to może by coś dało...
Jeśli już się tak upierasz przy tym mysql_ to chociaż użyj http://php.net/manual/en/function.mysql-error.php do wyświetlania błędów
Go to the top of the page
+Quote Post
Marcinekk
post
Post #10





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


No to ja chyba tępy jestem..

  1. $wynik = mysql_query("SELECT COUNT(id) as ilosc,status AS qnt FROM jobs JOIN users ON jobs.steamid=users.steamid WHERE jobs.status = 'Finished' ")
  2.  
  3. or die('Błąd zapytania');
  4.  
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. while($r = mysql_fetch_assoc($wynik)) {
  8. echo 'ilosc: '.$r['ilosc'].'</br></br>';
  9. }
  10. }


Żadnych zmian..
Go to the top of the page
+Quote Post
kapslokk
post
Post #11





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


No to z łaski swojej może wyświetlisz sobie błąd i jeśli nic Ci on nie będzie mówił to może go wrzucisz tutaj? Sorry, nikt z fusów nie wywróży jakie masz struktury tabeli itd.
Go to the top of the page
+Quote Post
Marcinekk
post
Post #12





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


A w jaki sposób mam podpiąć tą funkcję, skoro korzystam z funkcji db_connect() i nie mam w każdym skrypcie danych do połączenia?
Go to the top of the page
+Quote Post
viking
post
Post #13





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

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


mysql_query() or die(mysql_error())
Go to the top of the page
+Quote Post
Marcinekk
post
Post #14





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Column 'id' in field list is ambiguous.

Nie bardzo rozumiem dlaczego taki błąd jest. Dwuznaczne czyli co?
Go to the top of the page
+Quote Post
viking
post
Post #15





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

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


Obie tabele które łączysz mają kolumnę id. Musisz wskazać której dotyczy count
Go to the top of the page
+Quote Post
Marcinekk
post
Post #16





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Dobra. Wszystko działa, dziękuje za pomoc.

Jeszcze mam mały problem. Jak pobrać id AKTUALNIE dodawanego rekordu?

Próbowałem z tym $uid = mysql_insert_id(); ale nie bardzo się to spisuje.
Go to the top of the page
+Quote Post
kapslokk
post
Post #17





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Musi działać, pokaż skrypt, w którym tego używasz. Ofc mysql_insert_id() zwróci Ci id dopiero po wykonaniu inserta.

Ten post edytował kapslokk 8.12.2016, 10:35:05
Go to the top of the page
+Quote Post
Marcinekk
post
Post #18





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Chodzi dokładnie o to, że mam powiedzmy:

  1. INSERT INTO tabela (`cos`, `cos2`, `id`) VALUES ('costam', `costam, `tu id tego rekordu)


Czyli po prostu w tym zapytaniu chce drugi raz pobrać id tego samego rekordu (który właśnie idzie do bazy w zapytaniu wyżej). Auto increment nie ma znaczenia, bo potrzebne byłoby 2 razy, a można tylko raz.
Go to the top of the page
+Quote Post
kapslokk
post
Post #19





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


No to musisz zrobić UPDATE, swoja droga, po co Ci 2x ta sama wartosc w rekordzie ?

Ten post edytował kapslokk 8.12.2016, 10:44:42
Go to the top of the page
+Quote Post
Marcinekk
post
Post #20





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 27.09.2013

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


Z lenistwa. Musiałbym przerabiać praktycznie wszystkie skrypty pod kolumne z auto increment, wcześniej nie było potrzebne, ale teraz jest i jakoś musze to zrobić.

Czyli robię tak:

  1. INSERT INTO tabela (`cos`, `cos2`) VALUES ('costam', `costam)
  2. $uid = mysql_insert_id();
  3. UPDATE tabela SET costam='{$uid}' WHERE ?


No właśnie, WHERE co? (IMG:style_emoticons/default/co_jest.gif)

Ten post edytował Marcinekk 8.12.2016, 10:49:21
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 11.10.2025 - 06:38