Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ wyświetlanie w tabeli tylko ostatniego połączenia do klienta

Napisany przez: dentopolis 30.09.2022, 07:28:22

pobieram dane z dwóch połączonych tabeli i sortuję wg kolumny pilne z pierwszej tabeli. druga tabela zawiera wykonane telefony do klienta (datetime). chciałbym w tabeli wyświetlić wszystkie dane, ale w kolumnie połączenia mieć tylko datetime ostatniego połączenia. jak to zrobić?

  1. SELECT * FROM oczekujacy LEFT JOIN oczekujacytelefon ON oczekujacy.id=oczekujacytelefon.kto ORDER BY pilne DESC";



  1. http://www.php.net/echo "<td><a href='polaczenia.php?kto=$id'>";
  2. http://www.php.net/echo $polaczenie;
  3. http://www.php.net/echo "</a></td>";

Napisany przez: Salvation 30.09.2022, 20:50:52

Posortuj to jeszcze po datetime malejąco + pokombinuj z GROUP BY - ale ręki nie dam sobie obciąć.
Jak nie zadziała pobranie z bazy tak jak chcesz, to zawsze możesz zrobić z wynikiem co chcesz w PHP.

Napisany przez: dentopolis 4.11.2022, 18:21:57

w jaki sposób mogę w php pobrać tylko najnowszą datę?

mój obecny kod:

  1. $sql = "SELECT oczekujacy.id AS id, oczekujacy.pacjent AS pacjent, oczekujacy.telefon AS telefon, oczekujacy.lekarz AS lekarz, oczekujacy.kategoria AS kategoria, oczekujacy.pilne AS pilne, oczekujacy.dojazd AS dojazd, oczekujacy.dostepny AS dostepny, oczekujacy.informacje AS informacje, oczekujacy.wpisany AS wpisany, oczekujacy.archiwum AS archiwum, oczekujacytelefon.kto AS kto, oczekujacytelefon.polaczenie AS polaczenie FROM oczekujacy LEFT JOIN oczekujacytelefon ON oczekujacy.id=oczekujacytelefon.kto WHERE archiwum = 0 ORDER BY kategoria ASC, pilne DESC";
  2. $result = $conn->query($sql);
  3.  
  4. if ($result->num_rows > 0) {
  5. while($row = $result->fetch_assoc()) {
  6.  
  7. $id = $row['id'];
  8. $polaczenie = $row['polaczenie '];
  9.  
  10. http://www.php.net/echo $polaczenie;

Napisany przez: trueblue 4.11.2022, 19:14:57

A gdzie w zapytaniu jest data?
Chcesz pobrać pulę rekordów i wśród nich znaleźć najwcześniejszą datę czy pobrać jeden rekord z tą datą?

P.S. Poczytaj o aliasach w MySQL, bo obecnie stosujesz je w sposób niezgodny z ich przeznaczeniem (utrudniasz sobie pracę).

Napisany przez: aras785 4.11.2022, 20:14:33

tutaj masz rozwiązania: https://stackoverflow.com/questions/3619030/mysql-join-the-most-recent-row-only

jeśli faktycznie zależy Ci na jednym polu typu datetime (polaczenie) to można tak:


  1. SELECT oczekujacy.id AS id,
  2. oczekujacy.pacjent AS pacjent,
  3. oczekujacy.telefon AS telefon,
  4. oczekujacy.lekarz AS lekarz,
  5. oczekujacy.kategoria AS kategoria,
  6. oczekujacy.pilne AS pilne,
  7. oczekujacy.dojazd AS dojazd,
  8. oczekujacy.dostepny AS dostepny,
  9. oczekujacy.informacje AS informacje,
  10. oczekujacy.wpisany AS wpisany,
  11. oczekujacy.archiwum AS archiwum,
  12. MAX(oczekujacytelefon.polaczenie) AS polaczenie
  13. FROM oczekujacy
  14. LEFT JOIN oczekujacytelefon ON oczekujacy.id = oczekujacytelefon.kto
  15.  
  16. WHERE archiwum = 0
  17. GROUP BY oczekujacy.id
  18. ORDER BY kategoria ASC, pilne DESC


i jakbyś chciał posortować po "polaczenie" to: ORDER BY MAX(oczekujacytelefon.polaczenie) ASC lub DESC

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)