Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Извлечь данные одним запросом (http://forum.oszone.net/showthread.php?t=101125)

Strange_V 20-02-2008 18:28 744822

Извлечь данные одним запросом
 
На самом деле запрос немного сложнее и содержит больше таблиц, но упирается все в такую конструкцию:
Код:

workers
id|name|position|
 1|  n1|      1|
 2|  n2|      2|

position
id|num|date      |name|
 1|  1|01/01/2008|  p1|
 2|  2|01/01/2008|  p2|
 3|  1|01/02/2008| p1n|

Запрос:
Код:

SELECT w.name, p.name, p.date
FROM workers w
LEFT JOIN position p ON w.position = p.num (and поле date максимальное)

Должен получить:
Код:

|  n1| p1n|01/02/2008|
|  n2|  p2|01/01/2008|

В оригинале дата хранится в timestamp

Sham 20-02-2008 19:00 744846

Цитата:

Цитата Strange_V
(and поле date максимальное) »

Код:

ORDER BY date DESC LIMIT 2
?

Strange_V 20-02-2008 20:25 744919

Число записей в workers как и повторяющихся (с разными датами) в position непостоянно, так не выйдет, к тому же хотелось бы иметь возможность сортировать так как будет удобно пользователю.

Приблизительно так выбираются данные в оригинале (возможно так будет проще объяснить)
Код:

SELECT tmc.inv_num,
p.name AS position,
w.fname,
w.lname,
p.tn,
m.name AS model
FROM tmc
LEFT JOIN doc_work dw ON tmc.id = dw.tmc and dw.frm = -1 (вот тут выбираются лишние строки, нужно только с самим большим значением dw.date)
LEFT JOIN workers w ON dw.rcpt = w.id
LEFT JOIN position p ON w.position = p.n
LEFT JOIN model m ON tmc.model = m.n and tmc.type = m.type
WHERE tmc.type = 1
ORDER BY 1


Sham 20-02-2008 21:30 744981

imo без вложенного запроса не обойтись...
Код:

... AND date=(SELECT MAX(date) FROM p WHERE ....)
и запрос лучше как-то логически перестроить, поскольку сложно будет оптимизировать...

Strange_V 20-02-2008 23:18 745075

Sham, спасибо, так и хотел, но не совсем получалось.
Тут все ответы.


Время: 12:58.

Время: 12:58.
© OSzone.net 2001-