Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wynik pierwszego zapytania zalezny od drugiego
Forum PHP.pl > Forum > Bazy danych > MySQL
Arriss
Potrzebuje zapytanai ktore poda mi wyniki z tabeli tabela1 wtedy i tylko wtedy gdy istnieja wpisy w tabeli2 z tym ze rodzaj z tabeli2 ma sie rownac id z tabeli1. Prosze o pomoc.
wookieb
O INNER JOIN słyszał?
Arriss
Slyszal, nawet probowal, nie mam problemu polaczyc mam problem zrobic zeby znalezc tylko te wyniki ktore maja jakies wpisy w 2 tabeli przyklad

tabela1
id | nazwa
1 | nazwa1
2 | nazwa 2

tabela2

suma | rodzaj
2 | 1
5 | 1

i chce zapytanie ktore da mi w odpowidzi nazwa z tabeli1 (ale tylko nazwa1 bo ona ma wpisy w tabeli 2) oraz MIN z tabeli2

wookieb
No to robi się to właśnie za pomocą INNER JOIN
Arriss
Moglbys podac jakies przykladowe zapytanie tego typu lub jakis dobry tutek gdzie bedzie o tym?
Arriss
Trwa to jeszcze dluzej niz wczesniejsze 2 zapytania. gdy dla 1 przypada 100 000 wpisow a dla innych 0 ciezko w logicznym niezamulonym czasie wyszukac te ktore maja chodz 1 wpis i wypisac najnizsza wartosc. masz jakis pomysl jak to zoptymalizowac?
wookieb
Podaj zapytanie
Następnie wynik
  1. EXPLAIN [twoje_zapytanie_select]

A następnie podaj struktury tabel
  1. SHOW CREATE TABLE [nazwa_tabeli]

Bo bez tego nic nie możemy powiedzieć
Arriss
  1. SELECT * FROM gielda_kody_rodzaj INNER JOIN gielda_kody_oferty ON gielda_kody_rodzaj.id = gielda_kody_oferty.rodzaj


  1. id select_type TABLE type possible_keys KEY key_len ref rows Extra
  2. 1 SIMPLE gielda_kody_oferty ALL NULL NULL NULL NULL 90265
  3. 1 SIMPLE gielda_kody_rodzaj eq_ref PRIMARY PRIMARY 4 gielda.gielda_kody_oferty.rodzaj 1



  1. gielda_kody_rodzaj CREATE TABLE `gielda_kody_rodzaj` (\n `id` int(8) NOT NULL AUTO_INCREMENT,\n `nazwa` varchar(128) character SET utf8 collate utf8_polish_ci NOT NULL,\n `min` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n `max` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n `prefix` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n `www` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n `admin` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=MyISAM AUTO_INCREMENT=142 DEFAULT CHARSET=latin2


  1. gielda_kody_oferty CREATE TABLE `gielda_kody_oferty` (\n `id` int(8) NOT NULL AUTO_INCREMENT,\n `rodzaj` int(128) NOT NULL,\n `cena` decimal(65,2) NOT NULL,\n `nick` varchar(255) character SET utf8 collate utf8_polish_ci NOT NULL,\n `data` datetime NOT NULL,\n `kod` varchar(255) NOT NULL,\n `admin` varchar(255) NOT NULL,\n `stat` int(1) NOT NULL DEFAULT '0',\n PRIMARY KEY (`id`)\n) ENGINE=MyISAM AUTO_INCREMENT=116612 DEFAULT CHARSET=latin2
wookieb
W obu tabelach zmień silnik bazy danych na InnoDB ( w ustawieniach tabeli)
Dodaj index na polu "region" w tabeli gielda_kody_oferta.
Zamiast * wypisz liste pól, które chcesz pobrać bo wszystkie raczej nie są Ci potrzebne.
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.