Как обьединить запрос MySQL?

12
filosof
На сайте с 29.10.2005
Offline
171
911

Привет всем.

В общем задача в теории такова, нужно выбрать поля из таблицы по параметру который получается из выборки другой таблицы. То есть по сути это два запроса, первый узнает ID а второй уже по этому ID выбирает поля.

Как их обьединить в один?

Советовали Inner Join, но разве он может выбирать ПО РЕЗУЛЬТАТУ от предыдущей выборки?

Посоветовали такую странную конструкцию:

$query = "SELECT * FROM images WHERE id IN (SELECT id FROM categories WHERE dir='$member')";

Но она не работает. Не выдает вообще ничего. Как видно из конструкции, из таблицы из таблицы categories нужно выбрать поле с значением dir равному переменной member, узнать ID этого поля (оно будет только одно) и выбрать из таблицы images все строки с данным ID.

По делу, пожалуйста.

Shtogrin
На сайте с 02.11.2006
Offline
95
#1

Какая версия MySQL? Смотрите вложенные запросы

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
filosof
На сайте с 29.10.2005
Offline
171
#2

Версия скорее всего 4.X. В ней не работает, угадал? И что же тогда делать?

M
На сайте с 07.04.2005
Offline
86
#3

SELECT * FROM `teble1` as t1, `teble2` as t2 WHERE t1.`ID` = '1' AND t2.`t_ID` = t1.`ID`

Должно помочь, если я правильно понял.

Хелпзонович
На сайте с 15.06.2005
Offline
133
#4

select * from table1 where id in (select id from table2 where [условие])

Вы там держитесь! Хорошего вам настроения. Здоровья.
filosof
На сайте с 29.10.2005
Offline
171
#5
SELECT * FROM `teble1` as t1, `teble2` as t2 WHERE t1.`ID` = '1' AND t2.`t_ID` = t1.`ID`

Должно помочь, если я правильно понял.

А к моему примеру можно это как-то привести? И обьяснить в общих чертах что к чему?

select * from table1 where id in (select id from table2 where [условие])

Это не работает, читайте выше в первом посте.

M
На сайте с 07.04.2005
Offline
86
#6

filosof, попробуйте так: SELECT * FROM `images` as img, `categories` as cat WHERE cat.`dir` = '$member' AND img.`id` = cat.`id`

filosof
На сайте с 29.10.2005
Offline
171
#7

Не работает :(

В целом запрос выглядит так

$query = "SELECT * FROM `images` as img, `categories` as cat WHERE cat.`dir` = '$member' AND img.`id` = cat.`id`";
$result = mysql_query($query) or die(mysql_error() );
print_r(mysql_fetch_array($result));
while ($row = mysql_fetch_array($result)) {

$filename = ($row['filename']);

echo "$filename";

Так вот, $filename не выводится.

M
На сайте с 07.04.2005
Offline
86
#8

Это просто выборка из 2-х таблиц.

А хоть что-нибудь выводит? :)

edogs software
На сайте с 15.12.2005
Offline
775
#9
filosof:
Советовали Inner Join, но разве он может выбирать ПО РЕЗУЛЬТАТУ от предыдущей выборки?

Правильно советовали. Во вложенных запросах ничего особо хорошего нет как правило, правда удобно и просто.

Что касается Вашего вопроса - он по результату предыдущей не выбирает, т.к. выборка одна, но перед тем как отдать данные - с помощью where вполне можно отфильтровать только нужные. Если индексы где нужно положены - скорость получается душевная.

Как вариант попробуйте


select a.* from images as a left join categories as b on a.id=b.id
where b.dir='$member' and b.id is not null

P.S.: Если у Вас $member может содержать спецсимволы - кавычки и т.д. - сделайте перед запросом $member=mysql_real_escape_string($member); может у Вас именно из-за этого ошибка.

P.P.S.: И убедитесь в том, что запрос действительно что-то должен возвращать. А то бывает иногда - смотрим, ничего не выводит, ищем баг, а там просто совпадений нет.

P.P.P.S.: И почините таблицу заодно: repair . А то бывает таблица сбита - глючит, опять же нет результата когда он нужен, при этом ошибка не возвращается.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
filosof
На сайте с 29.10.2005
Offline
171
#10
А хоть что-нибудь выводит?

Если ставить простую выборку типа СЕЛЕКТ фром вэрэ= то всё выводится

select a.* from images as a left join categories as b on a.id=b.id
where b.dir='$member' and b.id is not null

Не работает.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий