Таблица: id, name, ... дубликаты в `name`
SELECT
`id`, `name`
FROM
`product`
GROUP BY
`name`
HAVING COUNT(*) >1
ORDER BY
`name`
тут выводит верно, но показывает один раз копию.
Спустя 5 минут, 21 секунда (23.08.2011 - 13:03) neadekvat написал(а):
Сходу придумывается только такое:
SELECT t1.`id`, t1.`name`, t2.`id`, t2.`name`
FROM `product` t1, `product` t2
WHERE t1.`name` = t2.`name` AND t1.`id` < t2.`id`
Спустя 7 минут, 24 секунды (23.08.2011 - 13:11) maximka787 написал(а):
neadekvat
пример по-моему рабочий, но долгй, и не совсем понятный, а разве нет более простых запросов для моих целей?
пример по-моему рабочий, но долгй, и не совсем понятный, а разве нет более простых запросов для моих целей?
Спустя 3 минуты, 41 секунда (23.08.2011 - 13:14) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:11) |
пример по-моему рабочий, но долгй, и не совсем понятный, а разве нет более простых запросов для моих целей? |
А фиг знает. Поищи или подожди еще ответов. Я не могу вспомнить, как можно достать дубликаты.
Запрос можно (нужно) переписать на LEFT JOIN:
SELECT t1.`id`, t1.`name`, t2.`id` as `id_2`, t2.`name` as `name_2`
FROM `product` t1
LEFT JOIN `product` t2 ON t1.`name` = t2.`name`
WHERE t1.`id` < t2.`id`
А что непонятно?
Спустя 3 минуты, 59 секунд (23.08.2011 - 13:18) maximka787 написал(а):
neadekvat
да про LEFT JOIN пора бы уже начинать браться. за 3 года ни разу не использовал.
Приходилось делать запросы огромные, но без JOIN
да про LEFT JOIN пора бы уже начинать браться. за 3 года ни разу не использовал.
Приходилось делать запросы огромные, но без JOIN
Спустя 4 минуты, 56 секунд (23.08.2011 - 13:23) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:18) |
да про LEFT JOIN пора бы уже начинать браться. за 3 года ни разу не использовал. Приходилось делать запросы огромные, но без JOIN |
О_О да ладно?
Чтобы не использовать JOIN, должны быть веские причины (например, база, находящаяся физически на разных серверах).
К тому же, именнов JOIN ничего сложного нет абсолютно.
Спустя 1 минута, 26 секунд (23.08.2011 - 13:25) maximka787 написал(а):
neadekvat
я наверно, просто не писал сложных запросов, соединял по 3-4 таблицы одним =
я наверно, просто не писал сложных запросов, соединял по 3-4 таблицы одним =
Спустя 4 минуты, 36 секунд (23.08.2011 - 13:29) maximka787 написал(а):
СДЕЛАЛ! да INNER JOIN помог
SELECT
t1.`id`,
t1.`name`
FROM
`product` AS t1
INNER JOIN
`product` AS t2 ON t1.`name` = t2.`name` AND
t1.`id` != t2.`id`
ORDER BY
name
Спустя 21 минута, 47 секунд (23.08.2011 - 13:51) maximka787 написал(а):
А воооот вопрос такой. скажите как мне сделать update только для
строк. это очень сложно?
наприме update table set name = XXX where (мой запрос выше)
SELECT
t1.`id`,
t1.`name`
FROM
`product` AS t1
INNER JOIN
`product` AS t2 ON t1.`name` = t2.`name` AND
t1.`id` != t2.`id`
ORDER BY
name
строк. это очень сложно?
наприме update table set name = XXX where (мой запрос выше)
Спустя 1 минута, 55 секунд (23.08.2011 - 13:53) neadekvat написал(а):
Большое значение в программировании имеет не только теоретическая подкованность, но и любознательность, подкрепляемая тестами и практикой.
Возьми да попробуй.
Возьми да попробуй.
Спустя 1 минута, 37 секунд (23.08.2011 - 13:55) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 14:51) |
where (мой запрос выше) |
Только что where?
У него есть вполне себе четкий синатксис, например:
WHERE id = %SOME%
Вот с %SOME% ты можешь экспериментирвоать, но синтаксис то надо соблюдать.
Спустя 1 минута, 57 секунд (23.08.2011 - 13:56) maximka787 написал(а):
neadekvat
я за недлю больше выучил чем за год в универе) любознательность как раз есть, просто обновить таблицу где простое условие просто, а там где сам селект сложный даже не знаю с какой стороны подойти.
я за недлю больше выучил чем за год в универе) любознательность как раз есть, просто обновить таблицу где простое условие просто, а там где сам селект сложный даже не знаю с какой стороны подойти.
Спустя 3 минуты, 51 секунда (23.08.2011 - 14:00) neadekvat написал(а):
maximka787, вот так можно делать:
UPDATE tbl SET col = val WHERE col = (SELECT col FROM tbl WHERE col = val);
col и val - разные значения.
Обрати внимание, что в подзапросе ты должен выбирать только одно поле (выделено жирным). Возможно, можно и иначе. Но для этого нужно покапать маны.
UPDATE tbl SET col = val WHERE col = (SELECT col FROM tbl WHERE col = val);
col и val - разные значения.
Обрати внимание, что в подзапросе ты должен выбирать только одно поле (выделено жирным). Возможно, можно и иначе. Но для этого нужно покапать маны.
Спустя 1 час, 3 минуты, 37 секунд (23.08.2011 - 15:04) maximka787 написал(а):
ПОМОГИТЕЕ лопну скоро, не мгу никак логику додумать немного
ошибки у меня в двух местах.
WHERE `name` =
и
WHERE
`name` = `name`
суть задачи, приплюсовать к полю url цифру если есть копия этого url
UPDATE `product` SET `url`= `url`+1 WHERE `name` =
(
SELECT
COUNT(url) AS cnt
FROM
`product`
WHERE
`name` = `name`
GROUP BY `url` HAVING ( COUNT(url)>1 )
)
ошибки у меня в двух местах.
WHERE `name` =
и
WHERE
`name` = `name`
суть задачи, приплюсовать к полю url цифру если есть копия этого url
Спустя 7 минут, 35 секунд (23.08.2011 - 15:12) neadekvat написал(а):
Чего-то я не догнал. Я тебе дал запрос. Ты какой-то запрос придумал. Так почему сейчас ты используешь вообще третий?
Спустя 1 минута, 23 секунды (23.08.2011 - 15:13) maximka787 написал(а):
neadekvat
ну так это результат, начал с твоего, дошел до этого. переделал так сильно
ну так это результат, начал с твоего, дошел до этого. переделал так сильно
Спустя 2 минуты, 28 секунд (23.08.2011 - 15:15) neadekvat написал(а):
Цитата (maximka787 @ 23.08.2011 - 16:13) |
ну так это результат, начал с твоего, дошел до этого. переделал так сильно |
И что, работает запрос-то?
Спустя 2 минуты, 18 секунд (23.08.2011 - 15:18) maximka787 написал(а):
Запрос глуп! явно не умею писать такие.
Вот, вторая часть запроса, это условие точно проверяет есть ли копия у одной, текущей записи.
Вот, вторая часть запроса, это условие точно проверяет есть ли копия у одной, текущей записи.
SELECT
COUNT(url) AS cnt
FROM
`product`
WHERE
`url` = 'MYTEXT'
GROUP BY `url` HAVING ( COUNT(url)>1 )
_____________
..Работает - не трогай!