Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] Wypisanie rekordu z tabeli
Forum PHP.pl > Forum > Przedszkole
Nataly7
Witam
Jestem bardzo początkująca jeśli chodzi o PHP. Potrzebuję pomocy:

Mam bazę danych o nazwie: "moja baza" a w niej tabelę: "people"


  1. CREATE TABLE people (
  2. IDPerson int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. name char(30),
  4. surname char(30),
  5. salary float(8,2),
  6. IDTool int(11)
  7. );
  8.  
  9. INSERT INTO people(name, surname, salary) VALUES('Janko', 'Muzykant', 1800.24);
  10. INSERT INTO people(name, surname, salary) VALUES('Pies', 'Pluto', 1478.54);
  11. INSERT INTO people(name, surname, salary) VALUES('Koszalek', 'Opalek', 800.10);


i mam wypisać informację o najlepiej zarabiającym pracowniku (pole Salary).

Napisałam coś takiego:

  1. <?php
  2. $db = mysql_connect("127.0.0.1", "root","") or die ('BŁĄD');
  3. mysql_select_db("mojabaza");
  4.  
  5. $sql3 = 'select name, surname, max(salary) from people';
  6.  
  7. if (!$result = mysql_query($sql3))
  8. {
  9. die('Błąd');
  10. }
  11.  
  12. while($row = mysql_fetch_array($result))
  13. {
  14. echo "{$row['name']} {$row['surname']} {$row['salary']}";
  15. }
  16. var_dump($result);
  17. printf($result);
  18. ?>



Ale niestety nie wiem co jest nie tak. Połączenie z bazą jest, ponieważ kiedy chcę wyświetlić całą tabelę to wszystko jest ok.
Proszę o pomoc.
marcio
Tzn co jest nie tak bo nie bardzo zrozumialem?

Ja bym zrobil to tak:

  1.  
  2. SELECT * FROM people WHERE salary = max(salary) ORDER BY id DESC
  3.  
slawo123
Wszystko masz ok oprócz wyświetlania wyniku.
Powinno być:

  1. echo "{$row['name']} {$row['surname']} {$row['max(salary)']}";


Bo nie wybierasz z bazy samego salary tylko max(salary)
Nataly7
Nie wiem dlaczego, ale wciąż wyskakuje mi błąd i chyba właśnie w tym zapytaniu jest coś nie tak.
marcio
racja mnie sie chyba pomylilo jesli dodasz do twojego zapytania:

  1.  
  2. max(salary) AS max
  3.  


Wtedy pod kluczek max bedzie wartosc max(salary) aczykolwiek moje rozwiazanie tez powinno dzialac.




Chyba ze nie dziala calosc

slawo123
A jaki konkretnie błąd ? Osobiście przetestowałem nto u siebie i wsio działa
Nataly7
Mam coś takiego:

  1. <?php
  2. $db = mysql_connect("127.0.0.1", "root","") or die ('BŁĄD');
  3. mysql_select_db("mojabaza");
  4.  
  5. $sql3 = 'select name, surname, max(salary) from people';
  6.  
  7. if (!$result = mysql_query($sql3))
  8. {
  9. die('Błąd');
  10. }
  11.  
  12. while($row = mysql_fetch_array($result))
  13. {
  14. echo "{$row['name']} {$row['surname']} {$row['max(salary)']}";
  15. }
  16. var_dump($result);
  17. printf($result);
  18. ?>


i nadal nie działa. Trochę dziwne
slawo123
Nie działa - ale czy biała strona jest czy jakiś błąd. A jeśli błąd to super by było gdybyś go nam tutaj zaprezentowała smile.gif
Nataly7
Wyświetla mi się tylko wyraz: Błąd ten, który występuje w pętli:

  1. if (!$result = mysql_query($sql3))
  2. {
  3. die('Błąd');
  4. }
slawo123
zamień ten kod na
  1. if (!$result = mysql_query($sql3)
  2. {
  3. die('Blad: '.mysql_error());
  4. }


i podaj powstałą treść
Nataly7
Teraz pokazało się: Blad: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
marcio
Zrob te zapytanie tak jak ci pokazalem
Nataly7
Napisałam:
  1. <?php
  2. $db = mysql_connect("127.0.0.1", "root","") or die ('BŁĄD');
  3. mysql_select_db("mojabaza");
  4.  
  5. $sql3 = 'SELECT* FROM people WHERE salary = max(salary) ORDER BY id DESC';
  6.  
  7. if (!$result = mysql_query($sql3))
  8. {
  9. die('Blad: '.mysql_error());
  10. }
  11.  
  12. while($row = mysql_fetch_array($result))
  13. {
  14. echo "{$row['name']} {$row['surname']} {$row['max(salary)']}";
  15. }
  16. var_dump($result);
  17. printf($result);
  18. ?>


Błąd: Blad: Invalid use of group function

Dobra nie wiem co jest nie tak, przecież to nie może być takie trudne.
marcio
  1.  
  2. SELECT name, surname, max(salary) AS maxs FROM people
  3.  


Sprobuj jeszcze tak.




Do tego co dodajesz do kolumny IDTool?

W maxs bedzie max salary

thek
A to nie prościej zrobić zapytanie:
  1. SELECT * FROM people ORDER BY salary DESC LIMIT 1
? Posortowanie malejące po dochodzie i zlimitowanie do 1 rekordu w wyniku smile.gif
Nataly7
thek dzięki, bardzo mi pomogłeś smile.gif
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.