- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Привет всем.
В общем задача в теории такова, нужно выбрать поля из таблицы по параметру который получается из выборки другой таблицы. То есть по сути это два запроса, первый узнает ID а второй уже по этому ID выбирает поля.
Как их обьединить в один?
Советовали Inner Join, но разве он может выбирать ПО РЕЗУЛЬТАТУ от предыдущей выборки?
Посоветовали такую странную конструкцию:
Но она не работает. Не выдает вообще ничего. Как видно из конструкции, из таблицы из таблицы categories нужно выбрать поле с значением dir равному переменной member, узнать ID этого поля (оно будет только одно) и выбрать из таблицы images все строки с данным ID.
По делу, пожалуйста.
Какая версия MySQL? Смотрите вложенные запросы
http://dev.mysql.com/doc/refman/5.0/en/subqueries.html
Версия скорее всего 4.X. В ней не работает, угадал? И что же тогда делать?
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 [условие])
Должно помочь, если я правильно понял.
А к моему примеру можно это как-то привести? И обьяснить в общих чертах что к чему?
Это не работает, читайте выше в первом посте.
filosof, попробуйте так: 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 не выводится.
Это просто выборка из 2-х таблиц.
А хоть что-нибудь выводит? :)
Советовали Inner Join, но разве он может выбирать ПО РЕЗУЛЬТАТУ от предыдущей выборки?
Правильно советовали. Во вложенных запросах ничего особо хорошего нет как правило, правда удобно и просто.
Что касается Вашего вопроса - он по результату предыдущей не выбирает, т.к. выборка одна, но перед тем как отдать данные - с помощью where вполне можно отфильтровать только нужные. Если индексы где нужно положены - скорость получается душевная.
Как вариант попробуйте
P.S.: Если у Вас $member может содержать спецсимволы - кавычки и т.д. - сделайте перед запросом $member=mysql_real_escape_string($member); может у Вас именно из-за этого ошибка.
P.P.S.: И убедитесь в том, что запрос действительно что-то должен возвращать. А то бывает иногда - смотрим, ничего не выводит, ищем баг, а там просто совпадений нет.
P.P.P.S.: И почините таблицу заодно: repair . А то бывает таблица сбита - глючит, опять же нет результата когда он нужен, при этом ошибка не возвращается.
Если ставить простую выборку типа СЕЛЕКТ фром вэрэ= то всё выводится
where b.dir='$member' and b.id is not null
Не работает.