Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wyciągnięcie danych z 2 tabel
Forum PHP.pl > Forum > Przedszkole
@rtur
Witam mam takie tabele 2:
  1. CREATE TABLE `newsy` (
  2. `nid` int(11) NOT NULL AUTO_INCREMENT,
  3. `tytul` varchar(128) NOT NULL,
  4. `tresc` text NOT NULL,
  5. `autor_id` varchar(11) NOT NULL,
  6. PRIMARY KEY (`nid`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
  8.  
  9. CREATE TABLE `autorzy` (
  10. `aid` int(11) NOT NULL AUTO_INCREMENT,
  11. `login` varchar(128) NOT NULL,
  12. PRIMARY KEY (`aid`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
  14.  
  15. INSERT INTO `newsy` VALUES(1, 'news 1', 'tresc 1 newsa','1');
  16. INSERT INTO `autorzy` VALUES(1, 'user 1');

Chciałbym teraz wyciągnąć i wyświetlić na stronie tytul, tresc, newsa o nid=1 z tabeli 'newsy' i login autora tego newsa który jest w tabeli 'autorzy', jak powinno wyglądać najbardziej optymalne zapytanie mysql żeby to pobrać?
artekp999
zrób w tabeli newsy rekord nick
do niego zapisuj nick z sesji
pozniej wyświetl rekord z bazy
Bags_Bunny
  1. SELECT * FROM newsy LEFT JOIN autorzy ON autor_id=aid WHERE nid=1

Pisane z palca, ale powinno styknąć. Gdybyś miał zgodne nazwy kolumn z id, byłoby jeszcze prościej.
mat-bi
Bags_Bunny, nie zadziała - zly styl joinów
Bags_Bunny
Nie mam pojęcia co to jest styl JOINów, ale u mnie działa.

--edit--
Tak sobie teraz jeszcze spojrzałem na zapytania i po jaką tandetę autor_id jest typu varchar?
mat-bi
chodzi mi o to, czy nie powinno być:

  1. SELECT * FROM newsy n LEFT JOIN autorzy a ON a.aid = n.autor_id


?
everth
Kolumny są jednoznaczne - mogłoby być ale niekoniecznie musi.
Bags_Bunny
Cytat(mat-bi @ 5.05.2011, 18:19:55 ) *
chodzi mi o to, czy nie powinno być:

Skoro nie wiesz jak powinno być, to dlaczego piszesz, że nie zadziała?
Jeśli kolumny są unikalne, to nie trzeba podawać nazwy tabeli, bo może być rozpoznana. Preferuję minimalizm.
mat-bi
Sorry, zawsze mi sie wydawało, że powinna być podana nazwa tabeli - ja preferuję całkowite wypisanie, nie trzeba się pote rozwlekać przy poprawkach
Bags_Bunny
A ja nie używam ON wink.gif.
@rtur
Cytat(artekp999 @ 5.05.2011, 18:02:04 ) *
zrób w tabeli newsy rekord nick
do niego zapisuj nick z sesji
pozniej wyświetl rekord z bazy


To nie byłoby złe, już tak miałem przemyślane, dodałem kolumnę login i wpisywałem w niej login autora, ten z bazy autorzy ale co jak zmienię użytkownikowi login w bazie autorzy?
Bags_Bunny
Cytat(@rtur @ 5.05.2011, 18:26:30 ) *
co jak zmienię użytkownikowi login w bazie autorzy?

I właśnie z tego powodu tamto rozwiązanie jest złe. Redundancja, normalizacja. Warto zapoznać się z tym pojęciami.
mat-bi
Cytat(artekp999 @ 5.05.2011, 19:02:04 ) *
zrób w tabeli newsy rekord nick
do niego zapisuj nick z sesji
pozniej wyświetl rekord z bazy


Jedno z najgłupszych rzeczy, jakie można zrobić - na takich danych operuje się zwykle na id, a przy pomocy odpowiedniego zapytania pobiera się login - w końcu jest on zwykle zmienny wink.gif

Tak, jak używa się zwykle id w sesji, nie loginów
@rtur
Cytat(Bags_Bunny @ 5.05.2011, 18:13:59 ) *
  1. SELECT * FROM newsy LEFT JOIN autorzy ON autor_id=aid WHERE nid=1

Pisane z palca, ale powinno styknąć. Gdybyś miał zgodne nazwy kolumn z id, byłoby jeszcze prościej.


Dzięki

Załóżmy że są zgodne, jak wtedy zrobić to prościej?

Twój kod wyciąga wszystkie kolumny z wiersza o nid=1, w tabeli newsy jak dobrze rozumiem, aby wyciągnąć wybrane kolumny powinienem po select dać ich nazwy zamiast '*', czy on też wyciąga wszystkie kolumny z konkretnego wiersza tabeli autorzy? bo mi zależy tylko na kolumnie 'login' z tabeli autorzy, nie potrzebne mi wszystkie.
Bags_Bunny
Cytat(@rtur @ 5.05.2011, 19:00:55 ) *
Załóżmy że są zgodne, jak wtedy zrobić to prościej?

  1. SELECT * FROM newsy LEFT JOIN autorzy USING(autor_id) WHERE nid=1


Cytat(@rtur @ 5.05.2011, 19:00:55 ) *
Twój kod wyciąga wszystkie kolumny z wiersza o nid=1, w tabeli newsy jak dobrze rozumiem, aby wyciągnąć wybrane kolumny powinienem po select dać ich nazwy zamiast '*', czy on też wyciąga wszystkie kolumny z konkretnego wiersza tabeli autorzy? bo mi zależy tylko na kolumnie 'login' z tabeli autorzy, nie potrzebne mi wszystkie.

Tak, możesz np. napisać newsy.*, login albo po prostu wylistować wszystko, co potrzebujesz.
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.