
Magic
06.11.2017
19:18:21
да, так и делается

lost
06.11.2017
19:18:22
тебе деревья вообще зачем?

Magic
06.11.2017
19:18:32
Нужна рефералка до 4 уровня вложенности
посоветовали nested sets

Google

lost
06.11.2017
19:18:49

Magic
06.11.2017
19:18:59
А что посоветуешь?

lost
06.11.2017
19:19:06
у тебя вложенность 4 уровня, зачем тебе nested sets
сделай список соседства
со связкой parent - child

Magic
06.11.2017
19:19:26
ну, а вдруг нужно будет больше сделать, ктож знает)
что за список соседства? так и гуглить?

lost
06.11.2017
19:19:53

Magic
06.11.2017
19:20:11
как бы я понимаю как сделать 1 уровень, тупо ref_id добавить. но не будет ли слишком сложный запрос на вытягивание всех родителей?

lost
06.11.2017
19:20:31

Pavel
06.11.2017
19:21:39
4 джоина для выборки делать так себе идея
(с перспективной до увеличения 5-6-7 джоинов)

lost
06.11.2017
19:22:21
для 4 левелов - вполне

Google

Pavel
06.11.2017
19:22:52
Так что может тут и норм совет nested sets

lost
06.11.2017
19:23:18
когда оно разрастётся - ты задолбаешься это пересчитывать)

Magic
06.11.2017
19:23:45
Да джоинить тоже проблема, их плохо знаю совсем.
запрос сможет подхватить то что в запросе идет?
как передать результат одного запроса в подзапрос следующий?

Pavel
06.11.2017
19:24:02
А перебирать 1000^4 строк для 1000 записей не задолбаешься? =)

lost
06.11.2017
19:24:49
зачем? я могу сохранять левел, и не будет никаких 1000^ 4

Pavel
06.11.2017
19:25:04

lost
06.11.2017
19:28:04
@temamagic Билл Карвин Программирование баз данных, там есть все основные паттерны деревьев и то как с ними работать

Pavel
06.11.2017
19:29:18
Судя по тому что он плохо знает джоины, может ему и рано читать про деревья в базе =(

Magic
06.11.2017
19:29:21
Мне понять я правильно делаю так и должно быть или что то действительно не так:

lost
06.11.2017
19:30:01
про деревья прочитай раздел, тебе будет достаточно

Magic
06.11.2017
19:30:05
есть вот такая таблица допустим
по логике добавления и пересчета тут все верно
Выбор родительской ветки я делаю так:
SELECT id, first_name, level FROM users WHERE left_key <= 7 AND right_key >= 8 ORDER BY left_key
т.е как бы выбирая всех родителей andy
При добавлении я делаю так:
UPDATE users SET right_key = right_key + 2, left_key = IF(left_key > ?, left_key + 2, left_key) WHERE right_key >= ?
где ? там right_key == родителю если он есть, либо максимальный в таблице
и потом уже insert где left_key = right_key, right_key = ключ выше + 1, level = level + 1
level = родителю либо 0 если его нет

Google

Magic
06.11.2017
19:35:17
в общем, как и в выше приведенной статье. она косячная или я туплю с ней?
причем дерево строится вроде адекватно, а вот родительская ветка странная

lost
06.11.2017
19:35:52
не родительская ветка странная
у тебя на 1 уровне юзеры вложены друг в друга
если мне память не изменяет, такого быть не должно
т.е. у тебя либо неправильно создались корневые узлы, либо неправильно проставился уровень потомков

Maks
06.11.2017
19:43:02
ребята, добрый вечер. Помогите пожалуйста понять, почему запрос некорректно работает (не знаю как это лучше продемонстрировать, запрос длинный, а я вынужденно погружаюсь в эту проблему)

lost
06.11.2017
19:43:35

Maks
06.11.2017
19:43:46
сейчас опишу

Magic
06.11.2017
19:44:03
Да, кажется так быть не должно. тогда не понимаю где ошибку искать. вроде делаю все ровно так, как описано. нашел какой-то класс на гитхабе, там процесс создания вроде такой же. сейчас еще немного поразмыслю
__
к этому ответу https://t.me/mysql_ru/9042

Maks
06.11.2017
19:45:42
WHERE pd.language_id = '2'
AND p.status = '1'
AND p.date_available <= NOW ( )
AND p2s.store_id = '0'
AND cp.path_id = '90'
AND mm.name = 'Nokian'
AND pa501.text = 'зимняя'
AND pa504.text = '225'
AND pa505.text = '50'
AND pa503.text = '17'
AND pa508.text = 'нет'
AND pa509.text = 'нет'
AND p.quantity > 0
вот тут, если в запросе pa508 имеет значение "нет", он возвращает продукты и с "есть" и "нет", а если pa508 имеет значение "есть", то возвращает все верно , только продукты у которых pa508 имеет значение "есть"
все остальное работает корректно

Yaroslav
06.11.2017
20:02:31
что за pa? где продукт атрибут
какие у тебя псевдонимы


Maks
06.11.2017
20:09:04
можно я сюда весь запрос кину?
раз все молчат значит можно наверное ?
SELECT p.product_id,
(
SELECT AVG ( rating ) AS total
FROM oc_review r1
WHERE r1.product_id = p.product_id
AND r1.status = '1'
GROUP BY r1.product_id )
AS rating,
(
SELECT price
FROM oc_product_discount pd2
WHERE pd2.product_id = p.product_id
AND pd2.customer_group_id = '1'
AND pd2.quantity = '1'
AND
(
(
pd2.date_start = '0000-00-00'
OR pd2.date_start < NOW ( ) )
AND
(
pd2.date_end = '0000-00-00'
OR pd2.date_end > NOW ( ) )
)
ORDER BY pd2.priority ASC,
pd2.price ASC LIMIT 1 )
AS discount,
(
SELECT price
FROM oc_product_special ps
WHERE ps.product_id = p.product_id
AND ps.customer_group_id = '1'
AND
(
(
ps.date_start = '0000-00-00'
OR ps.date_start < NOW ( ) )
AND
(
ps.date_end = '0000-00-00'
OR ps.date_end > NOW ( ) )
)
ORDER BY ps.priority ASC,
ps.price ASC LIMIT 1 )
AS special
FROM oc_category_path cp
LEFT JOIN oc_product_to_category p2c ON
(
cp.category_id = p2c.category_id )
LEFT JOIN oc_product p ON ( p2c.product_id = p.product_id )
LEFT JOIN oc_product_description pd ON ( p.product_id = pd.product_id )
LEFT JOIN oc_product_to_store p2s ON ( p.product_id = p2s.product_id )
LEFT JOIN oc_manufacturer mm ON
(
p.manufacturer_id = mm.manufacturer_id )
LEFT JOIN oc_product_attribute pa501 ON
(
p.product_id = pa501.product_id )
LEFT JOIN oc_product_attribute pa504 ON
(
p.product_id = pa504.product_id )
LEFT JOIN oc_product_attribute pa505 ON
(
p.product_id = pa505.product_id )
LEFT JOIN oc_product_attribute pa503 ON
(
p.product_id = pa503.product_id )
LEFT JOIN oc_product_attribute pa508 ON
(
p.product_id = pa508.product_id )
LEFT JOIN oc_product_attribute pa509 ON
(
p.product_id = pa509.product_id )
WHERE pd.language_id = '2'
AND p.status = '1'
AND p.date_available <= NOW ( )
AND p2s.store_id = '0'
AND cp.path_id = '90'
AND mm.name = 'Nokian'
AND pa501.text = 'зимняя'
AND pa504.text = '225'
AND pa505.text = '50'
AND pa503.text = '17'
AND pa508.text = 'нет'
AND pa509.text = 'нет'
AND p.quantity > 0
GROUP BY p.product_id
ORDER BY p.sort_order ASC,
LCASE ( pd.name ) ASC LIMIT 0,
15
если кто-то готов помочь за деньги - буду рад


Yaroslav
06.11.2017
20:13:58
ой жесть
не, тут долго разбираться

Google

Maks
06.11.2017
23:58:46
не, тут долго разбираться

Сергей
07.11.2017
08:28:29
если кто-то готов помочь за деньги - буду рад
смотри... на таблицы pa508, pa509 и т.д. не накладывается никакого условия, какой именно атрибут надо в них выбирать
т.е. под условие AND pa508.text = 'нет' подойдет и когда AND pa509.text = 'нет' - у них нет никаких различий!!!

Pavel
07.11.2017
09:09:17
привет всем, есть кто?
подскажите пожалуйста, можно ли запросом найти id продукта, если у него впереди стоит один или несколько нулей ?

Danil
07.11.2017
09:16:44
можно поиграться Like ("%XZY" - будет искать те где заканчиваеться на XZY не смотря на то что идет в начале)

Yaroslav
07.11.2017
09:18:15

Pavel
07.11.2017
09:21:34
like вроде как не катит

Сергей
07.11.2017
09:21:43
field_name= REPLACE(field_name, '0', '');
жуть

Pavel
07.11.2017
09:22:20
ага спасибо за ответ Сергей, только может быть ноль не один..\

Сергей
07.11.2017
09:22:33
так написал что жуть

Pavel
07.11.2017
10:04:04
эх.. с регулярными не знаком просто.. может с ними что можно придумать?
на подобии такого SELECT * FROM table_name WHERE field_name REGEXP \"(.*)str(.*)\"
только не выполняет запрос, как правильно оформить регулярку не знаю
разобрался, через php получилось сделать

Magic
07.11.2017
11:55:06
$right_ key – правый ключ родительского узла, или максимальный правый ключ плюс единица
а я делал просто максимальный ключ. в итоге там получается
right_key + 1, т.е максимальный ключ + 1 + 1
по этому корневые и вкладывались друг в друга, судя по всему

Google

Magic
07.11.2017
11:56:25
не доглядел или не так понял - не знаю, но кажется решение нашлось)

Yaroslav
08.11.2017
15:36:09
какой тип поля?
как импортиш, с какими параметрами?
покажи часть файла с value: '\xB0/227\xB0...'

Archer
08.11.2017
15:37:53
python encode ?

Yaroslav
08.11.2017
17:34:59
Экранировать

Otto
08.11.2017
17:35:48
как без экранирования импортировать..