Ostani rekord w tabeli

0

Witam

Prowadzę ewidencje wykładów. I tak:
W bazie wyklady mam tabelę jos_wydzialy i tabelę jos_wykłady (joomla 2.5)

Tabela wykłady :
-id
-imie
-nazwisko
-id_wydzialu
-data

  • miejsce
    -opis

W tabeli, dana osoba może być wpisana wiele razy, bo może uczestniczyć w wielu wykładach.
Chciałbym wyświetlić na stronie jaki był ostatni wpis do bazy (imie i nazwisko) oraz ile osób (nie ile wszystkich wpisów) jest wpisanych do bazy.
Proszę o pomoc w rozwiązaniu problemu.

Pozdrawiam

0

Ostatni:
SELECT imie, nazwisko FROM wyklady ORDER BY id DESC LIMIT 1
A ile jest osób o różnych imionach i nazwiskach to CHYBA tak ale nie jestem pewien.
SELECT COUNT(DISTINCT imie, nazwisko) FROM wyklady

0

SELECT Imie,Nazwisko,COUNT(*) AS Ilosc FROM Wyklady
GROUP BY Imie,Nazwisko

0

Baza jest źle zaprojektowana i nie jest w 3 formie normalnej! Osoby powinny mieć osobną tabelę!

0

Wiem, że powinna być osobna tabela osoby, ale mam już sporo wpisów w bazie i próbuję zrobić coś z tego co jest.

1

Ale to bez sensu. Przerzuć wszystkie osoby do nowej tabeli i znormalizuj to. Im wcześniej tym lepiej. Jak się później okaże że masz anomalie w stylu imie albo nazwisko jakiejś osoby raz z małej raz dużej litery to się obsrasz na miętowo.

0
kAzek napisał(a):

Ostatni:
SELECT imie, nazwisko FROM wyklady ORDER BY id DESC LIMIT 1
A ile jest osób o różnych imionach i nazwiskach to CHYBA tak ale nie jestem pewien.
SELECT COUNT(DISTINCT imie, nazwisko) FROM wyklady

a dlaczego zakładasz że id jest jakiegoś konkrertnego typu (pewnie integer)?
Bez pola określającego czas inserta w odniesieniu do innych rekordów nikt nie jest w stanie stwierdzić który wpis na pewno był ostatni.
Można ostatni wpis przechowywać ewentualnie w innej tabeli albo jakoś go oznaczyć, ale na pewno nie po samej wartości klucza. Ha.

0

chyba że dotyczy bazy Mysql, to sorry, nie wypowiadam się.

0

A jaką ma Twoim zdaniem joomla bazę jak nie MySQL?

0
kAzek napisał(a):

Ostatni:
SELECT imie, nazwisko FROM wyklady ORDER BY id DESC LIMIT 1
A ile jest osób o różnych imionach i nazwiskach to CHYBA tak ale nie jestem pewien.
SELECT COUNT(DISTINCT imie, nazwisko) FROM wyklady

A w takim razie w przypadku ostatniego wpisu jak powinien wyglądać kod php?

$sql = "SELECT imie, nazwisko
FROM $table_name
ORDER BY id DESC
LIMIT 1";
$result = @mysql_query($sql,$connection) or die("Couldn't execute query.");
$nazw = mysql_result($result,0,"(imie, nazwisko)"); 
0

Jakoś tak, oczywiście powinna być obsługa błędów:

$sql = 'SELECT imie, nazwisko FROM wyklady ORDER BY id DESC LIMIT 1';
$result = mysql_query($sql, $connection) ;
$row = mysql_fetch_array($result);
$imienazwisko = $row['imie'] . ' ' . $row['nazwisko'];

$sql = 'SELECT COUNT(DISTINCT imie, nazwisko) FROM wyklady';
$result = mysql_query($sql, $connection) ;
$ile = mysql_result($result, 0);
0

Działa doskonale! Dzięki

0

Mam jeszcze pytanie.
Chciałbym do wyświetlanego imienia i nazwiska dodać stopień naukowy

 $imienazwisko = $row['nazwastopnia'] . ' ' .['imie'] . ' ' . $row['nazwisko'];

Tabela tytuły:

  • id
  • nazwastopnia (np. mgr., dr. inż itp)

Tabela główna wykłady ma pole id_stopnia

Próbuję zrobić LEFTJOIN, ale nie wychodzi mi.

0

Ale które pole w tabeli tytuły (pewnie ID) jest powiązane którym polem tabeli wykłady (tu nie mam pojęcia)?

0

W tabeli tytuły - ID
W tabeli wykłady - id_stopnia

0

SELECT imie, nazwisko, nazwastopnia FROM wyklady AS w INNER JOIN tytuly AS t ON (w.id_stopnia = t.id) ORDER BY w.id DESC LIMIT 1

0

Dzięki wielkie. O to mi chodziło.

0

Dalej rozbudowując raporty chciałbym uzyskać informację ilu ludzi z jakich wydziałów brało udział w wykładach: (np. z wydziału IT 6, ) id_wydziału=1 (wydział IT)
I tak:

Tabela wykłady : Tabela wydziały
-id id_wydzialu
-imie nazwa
-nazwisko
-id_wydzialu
-data

  • miejsce
    -opis
SELECT COUNT( wykłady.imie, wykłady.nazwisko. wydziały.nazwa
FROM wykłady
INNER JOIN wydziały ON wydziały.id_wydziału=wykłady.id_wydziału
WHERE wydziały.id_wydziału = 1; 
 

Ale taki SELECT nie działa.

0
 SELECT COUNT(DISTINCT wykłady.imie, wykłady.nazwisko. wydziały.nazwa)
FROM wykłady
INNER JOIN wydziały ON wydziały.id_wydziału=wykłady.id_wydziału
WHERE wydziały.id_wydziału = 1; 

Tak działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1