[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на выбор с базы
Страницы: 1, 2, 3
SeryiVolk
таблица примерно такая:

Name last articul

ivan petrov 622

ivan petrov 623

petya ivanoff 2000

kolya pupkin 621

kostya popov 621

kostya popov 622


нужно выбрать всех людей не имеют артикля 622
xPoint
SELECT * FROM table WHERE articul!=622
так чтоли?
SeryiVolk
Цитата (xPoint @ 27.08.2009 - 09:33)
SELECT * FROM table WHERE articul!=622
так чтоли?

нет так не получится потому как имена тогда будут дублироваться.
так же как и в этом случае -

SELECT DISTINCT *
FROM STAT
WHERE (StatARTICUL NOT IN (622))
ORDER BY name
glock18
SQL
SELECT *
FROM STAT WHERE StatARTICUL <> 622
GROUP BY name, last
ORDER BY name


такое надо?
DenPHP
SQL
SELECT DISTINCT * FROM STAT WHERE articul != 622[s]
SeryiVolk
нет.

смотрите -
Name last articul

ivan petrov 622

ivan petrov 623

при вашем запросе - SELECT DISTINCT * FROM STAT WHERE articul != 622

все равно в критерий попадает ivan petrov
потому как есть запись ivan petrov 623

DenPHP
огогось....неа..я ток новичок..как и это сделать х3...
наверное двоной обработкой после выборки
glock18
SQL
SELECT CONCAT(s.name, ' ', s.last) as fullname FROM (SELECT CONCAT(name,' ', last) as name
FROM stat s
WHERE id = 622) filter
JOIN stat ON filter.name <> fullname;


Типа этого что-то. Не очень оптимальное решение.
SeryiVolk
Цитата (glock18 @ 27.08.2009 - 10:31)
SQL
SELECT CONCAT(s.name, ' ', s.last) as fullname FROM (SELECT CONCAT(name,' ', last) as name
FROM stat s
WHERE id = 622) filter
JOIN stat ON filter.name <> fullname;


Типа этого что-то. Не очень оптимальное решение.

спасибо.

но если честно, никак не могу применить ваш совет huh.gif

не пойму CONCAT и id = 622
их надо заменить?
Tigrus
Когда мне подобную задачу надо было решить - я её решил повторной обработкой на уровне PHP.

Подумаю как решить на уровне базы.
Michael
SQL
select * from stat where concat(name,last) not in (select concat(name,last)
from stat where articul=622)


_____________
There never was a struggle in the soul of a good man that was not hard
glock18
Цитата
не пойму CONCAT и id = 622
их надо заменить?


а, ну да. id это то же самое, что articul или как там его. а CONCAT не надо менять. так и оставь.

результат будет тебе выдан в одной ячейке. ivan petrov. если не надо в одной, то запрос легко достаточно переписывается.
glock18
Michael
да, так посимпотичней smile.gif хотя то же самое почти.

PS:
по правде говоря, затрудняюсь сказать какое решение быстрее. Твое явно красивее, но я боюсь, что оно несколько медленней. сейчас для теста табличку что ли такую заделаю, да проверю. интересно.
SeryiVolk
Цитата (Michael @ 27.08.2009 - 11:05)
SQL
select * from stat where concat(name,last) not in (select concat(name,last)
from stat where articul=622)



так у меня тоже ошибку выдает sad.gif
жалуется на concat (Function unknown. CONCAT.)


P.S.
glock18 заделай табличку, может вместе проверим )
glock18
и так вот что у меня получилось:

SQL
CREATE TABLE `articul`(
name VARCHAR(255),
last VARCHAR(255),
articul INTEGER
);


SQL
INSERT INTO `articul` VALUES
('ivan', 'petrov', 622),
('ivan', 'petrov', 623),
('petya', 'ivanoff', 2000),
('kolya', 'pupkin', 621),
('kostya', 'popov', 621),
('kostya', 'popov', 622);


когда начал выполнять понял, что мой не работает так, как надо smile.gif
Вариант Michael работает. хотя explain был нехороший достаточно. из-за этого я и хотел заставить mysql выполнять вложенный запрос один раз, вместо раза для каждой записи. Он серьезно тормозить, но мое решение оказалось ошибочным. Сейчас еще немного подумаю над этим, но затрудняюсь пока в дальнейшей оценке.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.