Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Pobieranie danych z dwóch tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
LaughFik
Hej.
Mam dwie tabelki:
Cytat
CREATE TABLE `lang` (
`l_id` int(11) NOT NULL auto_increment,
`l_ext` varchar(2) default NULL,
`l_val` text,
`u_usage` int(11) default NULL,
PRIMARY KEY (`l_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

CREATE TABLE `urls` (
`u_id` int(11) NOT NULL auto_increment,
`u_text` int(11) default NULL,
`u_href` varchar(256) default NULL,
`u_css_class` varchar(64) default NULL,
`u_css_id` varchar(64) default NULL,
`u_smarty_name` varchar(64) default NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

Url składa się głównie z dwóch części hrefa i tekstu wyświetlanego.
Oba elementy składuję w tabelce lang w tabelce url pola u_href i u_text mają numery u_usage rekordów z tabelki lang.
Jak mam pobrać zamiast u_text i u_href rekord odpowiadający urls.u_href = lang.u_usage as href i urls.u_text = lang.u_usage as text ?
Najprościej mówiąc chciałbym pobrać link z tym że jego adres i nazwa wyświetlana znajdują się w tabeli lang, a w tabeli urls są tylko identyfikatory (u_usage) przechowywać je chcę w tabeli bo chciałbym zrobić kilka wersji językowych. Czy wie ktoś jakiego zapytania użyć żeby zostały pobrane te dane ?
spryciula
podrzuć kilka przykładowych wpisów, jakie masz lub będziesz miał w tych dwóch tabelach
LaughFik
CODE
/*Data for the table `lang` */

insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','News',1);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','Company',2);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','Board',3);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','Nowości',1);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','Firma',2);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','Forum',3);

insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','nowosci.htm',4);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','firma.htm',5);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('pl','forum.htm',6);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','news.htm',4);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','company.htm',5);
insert into `lang`(`l_ext`,`l_val`,`u_usage`) values ('en','board.htm',6);


/*Data for the table `urls` */

insert into `urls`(`u_text`,`u_href`,`u_css_class`,`u_css_id`,`u_smarty_name`) values (1,4,NULL,NULL,'url_news');
insert into `urls`(`u_text`,`u_href`,`u_css_class`,`u_css_id`,`u_smarty_name`) values (2,5,NULL,NULL,'url_firma');
insert into `urls`(`u_text`,`u_href`,`u_css_class`,`u_css_id`,`u_smarty_name`) values (3,6,NULL,NULL,'url_forum');

Teraz chciałbym aby link miał taką postać <a href="nowosci.htm">Nowości</a> Parametry odpowiadające obu rekordom to 1 i 4 ( u_usage - ostatni dodawany parametr ) Jak pobrać te rekordy - dwa z tablicy lang kierując się rekordem z tablicy urls ?
spryciula
próbowałem napisać sql, pod twoje tabele, ale musiałbyś robić dwa zapytania
ja bym ci proponował, trochę inaczej, zbudować tabelę "lang"

  1. --
  2. -- Struktura tabeli dla `lang`
  3. --
  4.  
  5. CREATE TABLE `lang` (
  6. `l_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `l_ext` char(2) DEFAULT NULL,
  8. `l_val_href` text,
  9. `l_val_text` text,
  10. `u_usage` int(11) DEFAULT NULL,
  11. PRIMARY KEY (`l_id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;
  13.  
  14. --
  15. -- Zrzut danych tabeli `lang`
  16. --
  17. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('en','News','news.htm',4);
  18. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('en','Company','company.htm',5);
  19. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('en','Board','board.htm',6);
  20. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('pl','Nowości','nowosci.htm',4);
  21. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('pl','Firma','firma.htm',5);
  22. INSERT INTO `lang`(`l_ext`,`l_val_text`,`l_val_href`,`u_usage`) VALUES ('pl','Forum','forum.htm',6);


i wtedy wyciągasz dane za pomocą prostego sql'a

  1. SELECT l_val_href, l_val_text
  2. FROM lang1 l, urls u
  3. WHERE u.u_href = l.u_usage AND l_ext = 'pl'
LaughFik
Wszystko fajnie ale w tabeli lang mają być nie tylko linki ...
znaczy się moje ujednolicenie diabli wzięli i muszę zrobić to inaczej bo albo się nie da tak jak ja chcę albo nikt nie wie jak to zrobić faaaajnie

Konkurs rozwiązany !

mysql> SELECT l1.l_ext,l1.l_val as text,l2.l_val as url,urls.* FROM `urls` LEFT JOIN lang l1 ON l1.u_usage = urls.u_text
LEFT JOIN lang l2 ON l2.u_usage = urls.u_href WHERE l1.l_ext = 'pl' and l2.l_ext = 'pl';
Pobiera to zapytanie dokładnie to co trzeba.
Już zamierzałem zmieniać strukturę bazy ................... Dobrze jest wiedzieć że jest tutaj ktoś komu się chciało za dwadzieścia złotych napisać to dla mnie.
[SOLVED]
Koshin
Szkoda, że komuś jednak się nie chciało tych 20 zł wysłać sad.gif
To już drugi przypadek na tym forum, w ciągu miesiąca, gdy za pomoc nie otrzymuje OBIECANEGO grosza.
LaughFik
Bardzo przepraszam że tak wyszło.
Przeziębiłem się i w ogóle zapomniałem o bożym świecie.
Zwlekę się z wyra jutro ( właściwie już dzisiaj ), pójdę na pocztę i wyślę ci obiecane 20 złotych. Gwoli ścisłości tobie i drugiemu panu który mi przysłał rozwiązanie. Jeszcze raz obu was przepraszam.
Koshin
I wszystko u mnie dobrze się skończyło gdyż wpłynął obiecany bonus na moje konto. Dziękuje.
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.