Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] zapytanie z trzech tabel
Forum PHP.pl > Forum > Przedszkole
eeoo
Mam trzy tabele formularz, up, uzytkownik
formularz:
idzgloszenia, IP, data, rodzaj, uwagi, iduser, idup

up:
idup, adres, up

uzytkownik:
ID, imie, nazwisko, login, haslo, idup

zapytanie:
select idzgloszenia, data, rodzaj, uwagi, uzytkownik.login, up.up from formularz, uzytkownik, up;

daje wynik z powtarzajacymi sie idzgloszenia help
Foxx
A co właściwie chcesz uzyskać z bazy? Które pola są u Ciebie kluczami?
Czy idzgloszenia jest polem unikalnym?
Poza tym chyba brakuje chyba jakiegoś WHERE, nie?
Jak dla mnie to po takim zapytaniu dostaniesz dane bez sensu.

A jeżeli źle Cię zrozumiałem, to może chodzi Ci o GROUP BY idzgloszenia? Chociaż wątpię.
eeoo
chce uzyskac dane z tabeli formularz: idzgloszenia, IP, data, rodzaj, uwagi i z tabeli uzytkownik: login a z tabeli up: up

maja baza (nie wiem czy dobrze ja skonstruowalem)

CREATE TABLE `formularz` (
`idzgloszenia` int(11) NOT NULL auto_increment,
`IP` varchar(100) NOT NULL default '',
`data` datetime NOT NULL default '0000-00-00 00:00:00',
`rodzaj` varchar(50) NOT NULL default '',
`uwagi` longtext NOT NULL,
`iduser` int(3) NOT NULL default '0',
`idup` int(11) NOT NULL default '0',
PRIMARY KEY (`idzgloszenia`,`idup`,`iduser`),
KEY `IDX_formularz1` (`iduser`,`idup`)
) TYPE=MyISAM AUTO_INCREMENT=68 ;


CREATE TABLE `up` (
`idup` int(11) NOT NULL auto_increment,
`adres` text NOT NULL,
`up` varchar(20) NOT NULL default '',
PRIMARY KEY (`up`,`idup`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;


CREATE TABLE `uzytkownik` (
`ID` int(3) unsigned NOT NULL auto_increment,
`imie` varchar(40) NOT NULL default '',
`nazwisko` varchar(40) NOT NULL default '',
`login` varchar(20) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
`idup` int(2) NOT NULL default '0',
PRIMARY KEY (`idup`,`ID`,`login`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
Foxx
No to spróbuj tak:
  1. SELECT a.idzgloszenia, a.IP, a.DATA, a.rodzaj, a.uwagi, b.login, c.up
  2. FROM formularz
  3. AS a, uzytkownik AS b, up AS c
  4. WHERE a.iduser=b.ID AND a.idup=c.idup;


Ale nie gwarantuję, że tak bo średnio dobrze ponazywałeś te pola.
Daj każdej tabeli po pierwsze pole "id" i zrób z tego klucz główny, auto increment i wszystko będzie widać a teraz masz wszędzie inaczej, jakieś idup, ID, idzgloszenia...
eeoo
pozmienialem id

CREATE TABLE `formularz` (
`id` int(11) NOT NULL auto_increment,
`IP` varchar(100) NOT NULL default '',
`data` datetime NOT NULL default '0000-00-00 00:00:00',
`rodzaj` varchar(50) NOT NULL default '',
`uwagi` longtext NOT NULL,
`iduser` int(3) NOT NULL default '0',
`idup` int(11) NOT NULL default '0',
PRIMARY KEY (`idup`,`iduser`,`id`),
KEY `IDX_formularz1` (`iduser`,`idup`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

CREATE TABLE `up` (
`id` int(11) NOT NULL auto_increment,
`adres` text NOT NULL,
`up` varchar(20) NOT NULL default '',
PRIMARY KEY (`up`,`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

CREATE TABLE `uzytkownik` (
`id` int(3) unsigned NOT NULL auto_increment,
`imie` varchar(40) NOT NULL default '',
`nazwisko` varchar(40) NOT NULL default '',
`login` varchar(20) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
`idup` int(2) NOT NULL default '0',
PRIMARY KEY (`login`,`id`,`idup`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

ale zapytanie...
  1. SELECT a.id, a.IP, a.DATA, a.rodzaj, a.uwagi, b.login, c.up
  2. FROM formularz
  3. AS a, uzytkownik AS b, up AS c WHERE a.iduser=b.ID AND a.idup=c.id;

...nie daje poprawnych danych (nie wsyztskie zgloszenia sie wyswietlaja) , moze mam cos zle w strukturze bazy?
Foxx
Nie wiem czy potrafię Ci pomóc. Po pierwsze zrobiłbym te tabele tak:
  1. CREATE TABLE `formularz` (
  2. `id` int( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `IP` varchar( 100 ) NOT NULL DEFAULT '',
  4. `data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  5. `rodzaj` varchar( 50 ) NOT NULL DEFAULT '',
  6. `uwagi` longtext NOT NULL ,
  7. `iduser` int( 3 ) NOT NULL DEFAULT '0',
  8. `idup` int( 11 ) NOT NULL DEFAULT '0',
  9. PRIMARY KEY ( `id` )
  10. ) TYPE = MYISAM ;
  11.  
  12. CREATE TABLE `up` (
  13. `id` int( 11 ) NOT NULL AUTO_INCREMENT ,
  14. `adres` text NOT NULL ,
  15. `up` varchar( 20 ) NOT NULL DEFAULT '',
  16. PRIMARY KEY ( `id` )
  17. ) TYPE = MYISAM ;
  18.  
  19. CREATE TABLE `uzytkownik` (
  20. `id` int( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
  21. `imie` varchar( 40 ) NOT NULL DEFAULT '',
  22. `nazwisko` varchar( 40 ) NOT NULL DEFAULT '',
  23. `login` varchar( 20 ) NOT NULL DEFAULT '',
  24. `password` varchar( 20 ) NOT NULL DEFAULT '',
  25. `idup` int( 2 ) NOT NULL DEFAULT '0',
  26. PRIMARY KEY ( `id` )
  27. ) TYPE = MYISAM ;


usunąłem m.in. AUTO_INCREMENT=1 bo inaczej wszystkie rekordy w polu id miały wartość 1. Szczerze mówiąc nie mogę dojść dlaczego, powinno to chyba oznaczać że następny rekord dostanie wartość 1 ale nie rozumiem dlaczego dalej nie jest 2,3,... - ktoś by mógłby mnie oświecić?
Po drugie
  1. SELECT a.id, a.IP, a.DATA, a.rodzaj, a.uwagi, b.login, c.up
  2. FROM formularz
  3. AS a, uzytkownik AS b, up AS c WHERE a.iduser=b.id AND a.idup=c.id;

Powinno działać jeżeli dobrze zrozumiałem Twoje zamiary po tym jak wygląda baza. To znaczy wybierasz wszystkie wpisy z tabeli "formularz" przy czym zamiast identyfikatorów użytkownika i up chcesz mieć login użytkownika i samo up.
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.