Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Zwrócenie wyników których id znajduje się w innej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
tlaguz
Witam.

Mam dwie tabele.
Dla potrzeb pytania przyjmijmy ich strukturę:

PIERWSZA TABELA:
  1. `id` MEDIUMINT AUTO_INCREMENT NOT NULL UNIQUE KEY,
  2. `name` VARCHAR(255) NOT NULL UNIQUE KEY,
  3. PRIMARY KEY(`id`);


DRUGA TABELA:
  1. `id` MEDIUMINT AUTO_INCREMENT NOT NULL UNIQUE KEY,
  2. `someid` MEDIUMINT,
  3. PRIMARY KEY(`id`)


Potrzebuję wyświetlić wszystkie rekordy z tabeli A których ID jest gdziekolwiek wpisane w kolumnie someid tabeli B...

Nie mam pojęcia jak się do tego zabrać.

Warto też zaznaczyć, iż muszę to rozwiązać za pomocą SQL'a. Mógłbym pobrać dwie tabele i sprawdzić je za pomocą PHP, ale nie o to chodzi w tym skrypcie.

Z góry dziękuję za odpowiedź i pozdrawiam
tlaguz
darko
Ustaw w drugiej tabeli na polu someid klucz obcy (foreign key) do id z pierwszej tabeli i wtedy:
  1. SELECT * FROM tabela1 WHERE tabela1.id=tabela2.someid
tlaguz
Niestety otrzymuję taki błąd:

#1054 - Unknown column 'tabela2.someid' in 'where clause'

:/
cim
Witam,

może spróbuj podzapytaniem:
  1. SELECT * FROM tabela1 WHERE id IN (SELECT someid FROM tabela2)


Pozdrawiam

[dodane]
W razie potrzeby w podzapytaniu dopisz 'distinct' do 'someid', żeby każdą wartość zwracało tylko raz.
[/dodane]
tlaguz
cim jesteś wielki, działa biggrin.gif

Pomogłeś!

Temat do zamknięcia.
darko
Cytat(tlaguz @ 28.12.2009, 01:06:40 ) *
Niestety otrzymuję taki błąd:

#1054 - Unknown column 'tabela2.someid' in 'where clause'

:/

smile.gif wystarczyło, żebyś w miejsce tabela2 wstawił rzeczywistą nazwę swojej drugiej tabeli.
Mchl
Cytat(cim @ 28.12.2009, 01:18:49 ) *
  1. SELECT * FROM tabela1 WHERE id IN (SELECT someid FROM tabela2)


Poniżej MySQL 5.4 potencjalnie bardzo wolne zapytanie. Lepiej przepisać na JOINa.
cim
Cytat(Mchl @ 28.12.2009, 01:35:15 ) *
Poniżej MySQL 5.4 potencjalnie bardzo wolne zapytanie. Lepiej przepisać na JOINa.

A tego nie wiedziałem, zn. tak jak poniżej będzie wydajniej? Bo efekt w wynikach ten sam.
  1. SELECT tab1.* FROM `tab1` JOIN tab2 ON tab1.id=tab2.someid


Pozdrawiam
tlaguz
Cytat(darko @ 28.12.2009, 01:30:23 ) *
smile.gif wystarczyło, żebyś w miejsce tabela2 wstawił rzeczywistą nazwę swojej drugiej tabeli.


Wstawiłem, wstawiłem ^^
Aż taki głupi to ja nie jestem.

Chciałem tylko nawiązać do pierwszego mojego postu.

Niemniej jednak już sobie poradziłem
Dzięki wszystkim za pomoc!
Mchl
Cytat(cim @ 28.12.2009, 01:42:38 ) *
A tego nie wiedziałem, zn. tak jak poniżej będzie wydajniej? Bo efekt w wynikach ten sam.

Pozdrawiam


Im więcej wierszy w obu tabelach (zwłaszcza w tab1), tym większa różnica będzie na korzyść JOINa. Dla porządku ja bym dopisał, że to INNER JOIN.
http://dev.mysql.com/doc/refman/5.1/en/rew...subqueries.html
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.