|
krasun ↓
|
 |
|
25 Август, 2010, 12:30:54
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
Есть такой запрос:
SELECT b . * , CONCAT( GROUP_CONCAT( c.name ) ) categories, CONCAT( GROUP_CONCAT( c.id ) ) cid
FROM books b
JOIN categories_of_books cb ON b.id = cb.book_id
JOIN categories c ON c.id = cb.category_id
GROUP BY b.id
Все хорошо, он в categories мне пихает, все категории книги, а в cids id`шники всех категории, я потом это обрабатываю и все классно.
Но если, я добавлю условие WHERE c.category_id = 10, то в categories теперь не будет всех категорий книги, а только та, которую я указал и это понятно.
Есть ли способ, ограничить условием, но что бы в categories так и оставались все категории.
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 01:08:05 , спустя 37 минут 11 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
CONCAT тут зачем? это лишнее
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 01:10:03 , спустя 1 минуту 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
adw0rd, там инты блобом возвращаются
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 01:12:52 , спустя 2 минуты 49 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 01:17:15 , спустя 4 минуты 23 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
юзай вложенный селект или через if-ы разрулить попробуй Спустя 1 минуту 18 секунд добавил http://pyha.ru/forum/topic/4308.msg91137#msg91137
Ты имеешь ввиду?
SELECT b . * , GROUP_CONCAT( c.name ) categories, GROUP_CONCAT(CAST(c.id AS CHAR)) cid
FROM books b
JOIN categories_of_books cb ON b.id = cb.book_id
JOIN categories c ON c.id = cb.category_id
WHERE b.id IN (SELECT categories_of_books.book_id FROM categories_of_books JOIN categories ON categories_of_books.category_id = categories.id WHERE categories.id = 10)
GROUP BY b.id
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 01:22:56 , спустя 5 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
нет, вложенный селект так:
SELECT b . * , (SELECT id FROM categories) categories, GROUP_CONCAT(CAST(c.id AS CHAR)) cid ...
так как тебе нужны все категории, а иды не все Спустя 54 секунды добавил а вообще лучше это несколькими запросами, так как каждый раз ты одни и теже данные получаешь
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 01:24:01 , спустя 1 минуту 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
мне нужны все категории к книгам, при этом нужно выбрать одну книгу ограничив по категории Спустя 24 секунды добавил и иды все нужны и категории все Спустя 26 секунд добавил относящиеся к этой книге
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 01:27:08 , спустя 3 минуты 7 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
ясно, утром посмотрю, ссорь
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 01:28:32 , спустя 1 минуту 24 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
все норм Спустя 21 секунду добавил пока оставлю так, но хотелось бы вариант по оптимальней
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 01:29:14 , спустя 42 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
будет тебе вариант :)
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 01:51:11 , спустя 21 минуту 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
ок, посмотри, еще + убрал один join
SELECT b . * , GROUP_CONCAT( c.name ) categories, GROUP_CONCAT(CAST(c.id AS CHAR)) cid
FROM books b
JOIN categories_of_books cb ON b.id = cb.book_id
JOIN categories c ON c.id = cb.category_id
WHERE b.id IN (SELECT categories_of_books.book_id FROM categories_of_books WHERE categories_of_books.category_id = 10)
GROUP BY b.id
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
25 Август, 2010, 02:00:51 , спустя 9 минут 40 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1378 Сила слова: 2.98
|
посмотрим*
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Август, 2010, 04:06:57 , спустя 14 часов 6 минут 6 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
Так
SELECT b.*, GROUP_CONCAT(c.name) AS categories_names, GROUP_CONCAT(c.id) AS categories_ids
FROM categories_of_books AS cb
LEFT JOIN books AS b ON b.id = cb.book_id
JOIN categories AS c ON c.id = cb.category_id
WHERE cb.category_id = 10
GROUP BY b.id
Либо так
SELECT b.*, GROUP_CONCAT(c.name) AS categories_names, GROUP_CONCAT(c.id) AS categories_ids
FROM books AS b
LEFT JOIN categories_of_books AS cb ON b.id = cb.book_id
JOIN categories AS c ON c.id = cb.category_id
WHERE cb.category_id = 10
GROUP BY b.id
Посмотри что быстрее выполняется через explain/профайлинг Спустя 46 секунд добавил Если не работает, то дай дампы от 3-х таблиц, x11org@gmail.com
|
|
|
|
|
Записан
|
|
|
|
|