[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: фильтр данных бд
Страницы: 1, 2
Sergeiqwe93
последний запрос будет выводить организацию, если WHERE d.`id_elem` IN (1,2,3)
and a.`id_subcat` = 1
and d.value =1

но мне нужно, чтоб и для ид 1 и для 2, и для 3 условия выполнялось. и выводить только тогда, когда при всех трех and a.`id_subcat` = 1
and d.value =1
Valick
Sergeiqwe93, значение в одной ячейке поля не может быть одновременно равно 1,2 и 3. Этим трем значениям оно может быть одновременно не равно.
Вся проблема в том что у вас нет алгоритма решения вашей задачи, алгоритм - это последовательность действий и он в общем случае не завязан на какой-то конкретный язык программирования.
Возможно ваша проблема кроется в неправильной организации структуры БД. Разбираться в этом бесплатно нет ни времени ни желания. Вы же, например, не поедете к Сергеичу копать огород на даче ради того что бы просто размяться.

_____________
Стимулятор ~yoomoney - 41001303250491
Sergeiqwe93
мне кажется, что все вверху написано и есть что то похожее на алгоритм.
я уже не знаю, что еще написать, чтоб стало еще яснее... мне нужен совет что почитать. я просмотрел все операторы, но не нашел то что мне нужно. скажите что можно посмотреть, или что еще описать, чтоб было яснее?
Valick
Sergeiqwe93, ну что я могу посоветовать? Только почитать хорошую книгу (хотя мне за это уже предъявляют претензии, мол слишком часто я даю такую рекомендацию, но мне по барабану, я заставлять никого не собираюсь, я не имею никакого отношения к чужим знаниям и желанию учиться)
__
вам нужны организации у которых присутствуют все элементы в списке? По идее должно быть немного не так. Должны быть отсортированы организации по максимальному количеству элементов, так как например всех пяти или шести элементов может не быть ни в одной организации

_____________
Стимулятор ~yoomoney - 41001303250491
Sergeiqwe93
все это понятно. что касается бд, то уже читал одну. придется писать костыль. просто последнее решение было очень близко к моему. вот подумал может быть что то с этого выйдет... спасибо, что хоть что отвечаете... я серьезно, просто пишешь кучу вариантов задачи, и думаешь, что что-то не понятно... оно скорее что так и есть
скину чуть позже свой костыль, может быть, я здесь ни один такой буду
Valick
почему у вас в таблице No_barrier, есть и адрес организации и просто адрес?
___
уточняю, вам нужны адреса определённой организации по которым есть все элементы в фильтре?

_____________
Стимулятор ~yoomoney - 41001303250491
Sergeiqwe93
по одному адресу может находится несколько организаций и одна орг. может находится по неск адресам.
здесь нужна была связь многие ко многим
таблицы адрес и организации, свзязывает таблица организ_адрес
вот первая ид она оттуда и берется, а вторая это ид из таблицы адрес, он по сути в таблице no_barrer и не нужен...
Valick
Цитата
он по сути в таблице no_barrer и не нужен

ну я как бы об этом и говорил

_____________
Стимулятор ~yoomoney - 41001303250491
Sergeiqwe93
Цитата (Valick @ 5.04.2014 - 12:57)
уточняю, вам нужны адреса определённой организации по которым есть все элементы в фильтре?

да
inpost
Sergeiqwe93
Сделай с подзапросами, быстрее будет работать твоя задача.
Вот тебе костыль, который при определённых ситуациях работать не будет и очень нагружает систему. Я бы делал через подзапросы.
WHERE d.`id_elem` IN (1,2,3)
GROUP BY `id_elem`
HAVING COUNT(*) > 2



_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Valick
SELECT a.*, oa.*
FROM
(SELECT id_organ_adres, COUNT(id_organ_adres) c
FROM No_barrier
WHERE id_elem IN (".implode(',',$_GET['id_element']).")
AND id_organ = ".(int)$_GET['id_organ']."
GROUP BY id_organ_adres
ORDER BY c) nb
LEFT JOIN organ_adres oa ON oa.id = nb.id_organ_adres
LEFT JOIN organization o ON oa.id_organ = o.id


_____________
Стимулятор ~yoomoney - 41001303250491
Sergeiqwe93
Valick, inpost, большое вам спасибо
Вот рабочий вариант, касающийся моей задачи:

$a=$_REQUEST['sR'];
$query = "SELECT nameOrganization, gpsxAdres, gpsyAdres, nameStreet, houseAdres FROM (
(SELECT Organization.sh_name as nameOrganization, count(Organization.sh_name) as countElements,
Adres.gpsx as gpsxAdres, Adres.gpsy as gpsyAdres, Adres.house as houseAdres, Street.name as nameStreet
FROM Organization, Organ_Adres, Adres, No_barrier, Element, Street
WHERE Organ_Adres.id_organ = Organization.Id
AND Organ_Adres.id_adres = Adres.Id
AND No_barrier.id_organ_adres = Adres.Id
AND No_barrier.id_elem = Element.Id
AND Street.Id = Adres.id_street
AND Organization.id_subcat = "
.$a[0]." AND No_barrier.value = 1
AND No_barrier.id_elem IN (1,2,3) GROUP BY Organization.sh_name) AS result )
WHERE countElements = "
.(count($a)-1)." ORDER BY nameOrganization";

все это в коде выглядит немного иначе, но запрос такой же, ну No_barrier.id_elem IN (1,2,3) заполняю в цикле.
Может кому и пригодится...
Быстрый ответ:

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