Evgeniy
а ты запусти и посмотри
Иван
А не проще ли тут просто вложеный запрос использовать? :)
Evgeniy
в селекте?)
Evgeniy
а вот он точно будет каждый раз групировать запись
Иван
Ага :)
Evgeniy
а тут может оптимизации быть
Turik
друзья подскажите, допустим есть массив строка1, строка2, строка3
есть второй массив, строка1, строка2, строка4
так вот нужно узнать, есть ли во втором массиве хоть одно значение которого нету в первом (если оно конечно существует), в данном случае строка 4, как это сделать?
Evgeniy
и один раз будет групироваться
Evgeniy
Dmitriy
друзья подскажите, допустим есть массив строка1, строка2, строка3
есть второй массив, строка1, строка2, строка4
так вот нужно узнать, есть ли во втором массиве хоть одно значение которого нету в первом (если оно конечно существует), в данном случае строка 4, как это сделать?
$diff = array_diff(array2, array1);
Evgeniy
целый прямо псевдо код как в универе
Dmitriy
array_diff нет ?
Evgeniy
ну array_diff тоже самое
Иван
А чем такой запрос плох? :)
SELECT name,
age as age1,
(SELECT GROUP_CONCAT(name) target FROM peoples WHERE age = age1) as target
FROM peoples
Мне не придраться, просто понять хочется :)
Evgeniy
посмотри explain
Evgeniy
впринципе ничем)
Evgeniy
сама суть в explain
Evgeniy
в таком запросе точно не будет оптимизаций
Evgeniy
и вложенный запрос будет каждый раз заново молотить данные
Evgeniy
хотя не факт)
Иван
Иван
Sergey
Sergey
тем более вложенный select который ссылается на родительский select
Иван
По explain все таки немного иначе :)
По цифре rows :)
Иван
Хотя как на больших объемах будет себя вести я не знаю
Sergey
потому что ты просто перенес select в join
Sergey
а нужно заменить на
select from peoples p1
join peoples p2 on ...
Иван
Мой запрос как раз таки первый :)
Иван
Можешь полность запрос написать, не очень понял что ты имеешь ввиду? :)
Sergey
попробуй напиши запрос в котором будет только 1 слово SELECT
Иван
Вот это я и не понимаю ка сделать :)
Evgeniy
Сергей говорит
Evgeniy
сджойнить таблицу саму с собой
Иван
Я поэтому и попросил написать как это сделать можно :)
Evgeniy
и потом в этой же таблице группировку
Evgeniy
сделать
Sergey
Evgeniy
select t1.id, GROUP_CONCAT(t2.name)
FROM table t1
LEFT JOIN table t2 ON ...
GROUP BY t1.id
Evgeniy
как то так
Evgeniy
я понял сергея
Evgeniy
но тут не канал не об оптимизацияциях
Evgeniy
если речь об оптимизациях тут очень зависит от БД и схемы
Иван
Иван
Не, тут об оптимизации и речи нет, тут больше на знание SQL :)
Evgeniy
объединяй по age а не id
Evgeniy
ON t1.age = t2.age
Иван
Извините если не в тему, просто подумал интересно будет такие задачки порешать :)
Evgeniy
тем самым людей одного возраста соберешь)
Sergey
Sergey
там полно таких
Иван
Иван
Спасибо большое, потренеруюсь :)
Иван
Я просто подумал так как сам на пхп пишу будет интересно узнать как бы эту задачу товарищи по ремеслу решили :)
Когда на специфичные форумы заходишь, чувствуешь себя каким-то первокласником на уроке вышмата :)))
Evgeniy
ну твой вариант норм
Evgeniy
то что я предложил норм
Evgeniy
зависит от проблем если медленно работает уже думаешь
Владислав
Есть две таблицы.
table_a
id int(11)
unique_index varchar(24)
table_b
id int(11)
var_a int(11)
var_b int(11)
foreign_key_to_unique_index int(11)
Как сделать insert вместе с join'ом? Пока что все попытки приводят к неудаче. В идеале нужен insert on duplicate key update. Делаю таким образом:
INSERT INTO table_b (a, b, foreign_key_to_unique_index) SELECT table_a.id FROM table_a LEFT JOIN table_b ON table_a.id=foreign_key_to_unique_index WHERE unique_index='blabla' ON DUPLICATE KEY UPDATE a=20;
Получаю ошибку вида:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Владислав
Поправка: fk не на unique_index а на id ссылается.
Sergey
Sergey
да
Владислав
Гм, я думал, я перечисляю те поля, которые хочу записать. Спасибо, попробую иначе.
Sergey
ты перечислил в которые хочешь записать, а в SELECT у тебя что записывать
Sergey
без проблем можно написать INSERT INTO table_b (a,b) SELECT b,a FROM table_a
Владислав
Так. А если у меня уже есть данные, следовательно, мне вообще select не нужен?
Sergey
да, ты их через VALUES можешь передать
Владислав
Гм, спасибо, сейчас попробую, а то уже плохо понимаю под вечер. =)
Владислав
Такое возможно?
Sergey
нет
Владислав
Печально. Придётся разбивать на запросы..
Sergey
INSERT INTO table_b (a, b, c) SELECT 'a', 'b', c FROM table_a WHERE x=1;
Sergey
такое можно
Владислав
А, вот как. И там я уже подставлю имеющиеся значения. Спасибо. =)
Sergey
да, вместо 'а' и 'b' могут быть любые строки\числа
Владислав
Вот это удобно
николай