SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.04.2014 00:15:49

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Двойной запрос

Здравствуйте. Хочу объеденить этот запрос

$sql = "SELECT id
FROM cms_video_category c1
JOIN cms_video_category c2
ON c1.id = c2.parent_id
WHERE c1.seolink = '".$link."'
";
с этим

$sql = "SELECT v.*
FROM cms_video v
LEFT JOIN cms_video_category c
ON v.cat_id = //здесь должны быть id с первого запроса c1.id
LIMIT 1";

И что то не выходит. Пытался просто в скобки вставить второй запрос, но...Подскажите. Таблица` cms_video_category` одна и таже.

Отредактированно ureech (24.04.2014 00:17:00)

Неактивен

 

#2 24.04.2014 00:18:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 24.04.2014 00:30:32

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

А как получится?

Неактивен

 

#4 24.04.2014 00:36:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

Как я писал выше - если будете выбирать одинаковое количество полей в каждом запросе, при этом чтобы их порядок и тип совпадали - так получится.

Не очень понимаю, как Вы хотите объединить два Ваших столь разнородных запроса.
Приведите структуру таблиц с тестовым набором данных - и результат, который Вы хотите получить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 24.04.2014 00:55:57

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Я хочу вывести картинки подкатегории в категории. Эти запросы всё на что хватило ума. Т.е. сначало я собирался получить id строк где присутствуют подкатегории(parent_id) соответствующей категории($link). Это в таблице категорий.(c) А затем получить получить сами картинки , они в другой таблице.(v). А cat_id (v) = id (c). Как привести структуру таблиц с данными я что не понял.Снять дамп обоих таблиц?

Неактивен

 

#6 24.04.2014 00:58:00

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

Да, проще всего снять дамп обеих таблиц - и структуру и данные. И приведите пример результата - какой Вы хотите получить, основываясь на Ваших данных.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 24.04.2014 01:14:12

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

На примере категории "Музыка".(Табл. cms_video_category. ) id = 1049. Имеет две подкатегории id = 1052, 1053.
В таблице cms_video есть две картинки cat_id = 1052, 1053
Вот мне и надо вывести эти картинки в категории id=1049

Отредактированно ureech (24.04.2014 01:14:50)


Прикрепленные файлы:
Attachment Icon test-vid.sql, Размер: 10,225 байт, Скачано: 1,108

Неактивен

 

#8 24.04.2014 01:19:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

SELECT * FROM `cms_video` WHERE `cat_id` IN ( SELECT `id` FROM `cms_video_category` WHERE `parent_id` = 1049 );

Похоже на правду?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 24.04.2014 01:22:35

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Да, на правду похоже, но `parent_id` = 1049 не пойдёт. Нужна динамика. Пользователь будет создавать категории и т.п.

Неактивен

 

#10 24.04.2014 01:26:45

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

Ну конечно вместо 1049 подставляется значение, пришедшее извне.
Изначально стояло
WHERE c1.seolink = '".$link."'
ну и измените нужным образом.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 24.04.2014 01:38:34

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Нет, не хочет работать с $link. С parent_id работает. А с $link вообще ничего не выводит.  Сама  переменная рабочая. Она работает на этой же странице в другом запросе.

Неактивен

 

#12 24.04.2014 01:39:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойной запрос

Распечатайте переменную $link, сам запрос и приведите сюда.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 24.04.2014 01:42:20

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Хотя нет, где то что то я видно накосячил с кодом. Пойду ошибку искать. Отпишусь.

Неактивен

 

#14 24.04.2014 02:03:39

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

В общем такая ситуация. Переменная в порядке. Смотрю запросы на странице, вот он
SELECT * FROM `cms_video` WHERE `cat_id` IN ( SELECT `id` FROM `cms_video_category` WHERE seolink = 'muzyka' );
Но ничего не выводит. А если я добавляю в саму категорию картинку, то print_r() выводит массив этой картинки. Хотя не должен.
Хотя нет должен. Всё верно. Посмотрите на запрос. cat_id = id где $link = ... Главного то нет. Где parent_id вообще?

Неактивен

 

#15 24.04.2014 02:36:54

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Bcё, решил,слава Богу и вашему вниманию. Спасибо за быстрый отклик.

  $sql = "SELECT * FROM cms_video v1
    WHERE v1.cat_id IN
    ( SELECT c1.id
    FROM cms_video_category AS c1
    LEFT JOIN cms_video_category AS c2
     ON c2.id = c1.parent_id
     WHERE c2.seolink = '".$link."' );
    ";

так работает.

Неактивен

 

#16 24.04.2014 09:17:04

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Это снова я. Помогите ещё разок. Теперь мне не сосчитать картинки. Сейчас у меня получается два запроса. Один выводит из подкатегорий, а другой из категории, (если нет подката). Когда не было подкатегорий общее кол-во, для пагинации, $total, считалось исходя из cat_id (1049 которая),

$sql = "SELECT * FROM cms_video WHERE cat_id =".$id; Где $id = $cat['id']
из
такой ф-ции : $cat = $inDB->get_fields('cms_video_category', 'seolink = "'.$link.'"', '*');

Т.е это запрос на вывод всех данных из самой
"чистой" категории, а сейчас у меня в этой переменной "не пойми что", id = parent_id, а точнее

  ( SELECT c1.id
    FROM cms_video_category AS c1
    LEFT JOIN cms_video_category AS c2
     ON c2.id = c1.parent_id
     WHERE c2.seolink = '".$link."' );
Т.е. мне как бы следует вставить это в ф-цию вместо  'seolink = "'.$link.'"', т.к. это и есть WHERE. В общем не знаю как посчитать. Возможно ли как то записать эту конструкцию в переменную и потом её использовать в ф-ции вместо $where. Других идей нет.

Неактивен

 

#17 24.04.2014 10:12:21

ureech
Участник
Зарегистрирован: 24.04.2014
Сообщений: 13

Re: Двойной запрос

Ещё суть в том, что в принципе у меня есть все данные для подсчёта в осносном запросе, но там выводится массив такого вида

Array ( [0] => Array ( [id] => 100 [seodes] => [album_id] => 1052, а нужен наверное такого Array ( [id] => 100 [seodes] => [album_id] =>

И я не могу из него достать [xxx], а если сделаю пересчёт, то выводит только одну строку с базы, или первую или последнею.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson