@mysql_ru

Страница 91 из 142
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
посоветовали nested sets
плохой советчик

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
ну, а вдруг нужно будет больше сделать, ктож знает)

что за список соседства? так и гуглить?

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

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

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

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

Magic
06.11.2017
19:29:21
А перебирать 1000^4 строк для 1000 записей не задолбаешься? =)
вопрос даже в другом. У меня сейчас вроде идет нормально пересчет. моя главная головная боль в том, что когда я выбираю родительскую ветку, в нее попадает не родитель

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

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
ребята, добрый вечер. Помогите пожалуйста понять, почему запрос некорректно работает (не знаю как это лучше продемонстрировать, запрос длинный, а я вынужденно погружаюсь в эту проблему)

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 = 'нет' - у них нет никаких различий!!!

если кто-то готов помочь за деньги - буду рад
здесь надо в условие джойна обязательно добавить еще какой-то код атрибута!

если кто-то готов помочь за деньги - буду рад
LEFT JOIN oc_product_attribute pa508 ON (p.product_id = pa508.product_id AND pa508.attributeID=123) вот так надо, во всех джойнах!

Pavel
07.11.2017
09:09:17
привет всем, есть кто?

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

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

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
как без экранирования импортировать..

Страница 91 из 142