[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение, сравнение нескольких таблиц
Arh
Есть запрос, он кривой :)
SELECT DISTINCT modules.modules_name,
modules_mods.modules_name,
modules_links.modules_name
FROM modules,
modules_mods,
modules_links
WHERE modules.modules_status = 1
AND
(
modules.modules_name='faq'
OR modules.modules_show = 4
OR (modules.modules_show IN (2,5,7) AND modules_mods.modules_main='faq')
OR (modules.modules_show IN (3,6,7) AND modules_links.modules_links='/?mod=page')
)


В него можно вчитаться и покритиковать, но я знаю что я ничего не знаю, так что объясняйте критикуя :)
Проблемы две:

Во первых если какаето из таблиц будет пустая.
modules.modules_name,
modules_mods.modules_name,
modules_links.modules_name


То данные не выводятся ни из одно из них. А нужно выводить, так как изначально таблицы будут пустые, да и со временем они то чистятся, то заполняются обратно.
Как бы сделать условие или написать по другому, чтобы данные выводились даже если какаето таблица не заполнена?

Проблема вторая:
Забудьте про первый запрос и про вывод данных при наличии пустых таблиц, вот простой пример:
SELECT modules.modules_name,
modules_mods.modules_name
FROM modules,
modules_mods
WHERE modules.modules_show IN (2) AND modules_mods.modules_main='faq'


Как думал я. Я думал запрос посмотрит в таблицу modules, возьмет от туда те записи из поля modules_name у которых modules_show = 2 , потом пойдет в таблицу modules_mods, возьмет от туда записи из поля modules_name те значения которые пришли из первой таблицы и у которых modules_main = faq :)
Но. Показывает он мне просто все записи из первой таблицы у которой show = 2 и записи из второй, у которой main = faq.

А в итоге мне нужно получить массив с данными, который в цикле при $row['modules_name'] выведит мне с правилом 2 и main = faq.

Вроде понятно написал, хелп ми :)



Спустя 6 минут, 7 секунд (14.09.2011 - 17:14) Arh написал(а):
Тоесть дай мне modules_name из modules_mods.modules_main='faq' где modules.modules_show=2

Спустя 17 часов, 56 минут, 31 секунда (15.09.2011 - 11:10) Renden написал(а):
Arh
Проблема вторая:
А так?

SELECT m.modules_name,mm.modules_name
FROM modules m
LEFT JOIN modules_mods mm ON mm.modules_main='faq' AND m.modules_show=2

Спустя 1 час, 39 минут, 37 секунд (15.09.2011 - 12:50) Arh написал(а):
[SQL] SELECT modules.modules_name, modules_mods.modules_name
FROM modules, modules_mods
LEFT JOIN modules, modules_mods ON modules_mods.modules_main = "faq" AND modules.modules_show = '2'




[Err] 1066 - Not unique table/alias: 'modules'

Спустя 4 часа, 36 минут, 50 секунд (15.09.2011 - 17:27) Arh написал(а):
Проблему номер два решил. Сделал правда без JOIN
SELECT DISTINCT m.modules_name
FROM acms_sys_modules m,
acms_sys_modules_mods mm,
acms_sys_modules_links ml
WHERE m.modules_status = 1
AND
m.modules_name = "faq"
OR
m.modules_show = 4
OR (m.modules_name=mm.modules_name AND m.modules_show IN (2,5,7) AND mm.modules_main='faq')
OR (m.modules_name=ml.modules_name AND m.modules_show IN (3,6,7) AND ml.modules_links='/?mod=faq')


Всё работает отлично, но при пустой таблице ничего не возвращает :)

Сделал на JON, первая проблема решилась :) Оба JOIN работают как надо по одиночке, но вместе как то перемешиваются и ничего не возвращают, понятно почему, но непонятно как их разделать в одном запросе.
Часть первая

JOIN acms_sys_modules_links ml
ON
(m.modules_name=ml.modules_name OR m.modules_name=ml.modules_links)
AND ml.modules_links='/?mod=page'
AND m.modules_show IN (3,6,7)
AND m.modules_status = 1


Часть вторая
JOIN acms_sys_modules_mods mm
ON
(m.modules_name=mm.modules_name OR m.modules_name=mm.modules_main)
AND mm.modules_main='faq'
AND m.modules_show IN (2,5,7)
AND m.modules_status = 1


Спустя 12 минут, 16 секунд (15.09.2011 - 17:39) caballero написал(а):
Что то не вижу где таблицы перевязываются друг с другом
те join что есть не имеют никакого смысла

таблицы перевяжи.
хоть через join хоть в условии where
они ж выводятся каждая сама по себе

Спустя 20 минут, 55 секунд (15.09.2011 - 18:00) Arh написал(а):
Цитата (caballero @ 15.09.2011 - 14:39)
таблицы перевяжи.

В общем всё работает, всем спасибо.
Не понял что значит перевязать таблицы.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.