|
|
|
| Есть две таблицы
- table1: поле razdel и table2: поля - razd, zapis,data(Y-m-d).
Необходимо вывести разделы (razdel )
из table1 с приоритетом (первые те, которые в table2 есть с текущей датой).
Химичу, но что-то не идёт:
$res=mysql_query("SELECT razdel FROM table1 where razdel in (SELECT razd as razdel FROM table2 where data>= NOW() ORDER by `data` asc"));
|
| |
|
|
|
|
|
|
|
для: Владимир22
(28.07.2011 в 22:13)
| | опишите сущности таблиц, а т не понятно от чьей .... | |
|
|
|
|
|
|
|
для: Valick
(28.07.2011 в 22:41)
| | Так всё вроде и описал, вывести из первой таблицы разделы в следующем порядке:
сначала те, что во второй таблице есть с сегодняшней датой, а далее все остальные - по убыванию даты. | |
|
|
|
|
|
|
|
для: Владимир22
(28.07.2011 в 22:45)
| | мне по барабану (на данном этапе что и куда нужно вывести), я хочу знать что содержится в в первой таблице, а что во второй и чем они связаны друг с другом.
Я спрашиваю не потому что мне делать нефига, а потому что для корректного ответа нужно понимать суть проблемы.
__
я подозреваю что нужно что-то типа этого, только там одна таблица, а у вас две | |
|
|
|
|
|
|
|
для: Valick
(28.07.2011 в 22:52)
| | В первой таблице - просто разделы
Во второй - записи по разделам и с датами. | |
|
|
|
|
|
|
|
для: Владимир22
(28.07.2011 в 23:04)
| | я кажется понял что вам нужно, но это не совсем то о чем вы просите, тут все гораздо проще
дайте точные названия полей (и еще раз спрашиваю по какому полю связаны таблицы)
table1: поле razdel тут должен быть по крайней мере хотя бы идентификатор строки | |
|
|
|
|
|
|
|
для: Владимир22
(28.07.2011 в 23:04)
| | ладно, включаю третий глаз...
таблица1
таблица2
id_zap | id_razd | zap | putdt
|
причем putdt - лучше DATETIME или TIMESTAMP
усли нужно получить id_razd то запрос выглядит так:
SELECT id_razd FROM table2 GROUP BY id_razd ORDER BY putdt ASC
|
если нужно получить имена разделов, то например так:
SELECT name_razd
FROM table1 JOIN table2
USING (id_razd)
GROUP BY table2.id_razd ORDER BY table2.putdt ASC
|
| |
|
|
|
|
|
|
|
для: Valick
(28.07.2011 в 23:41)
| | В первой таблице название поле "razdel" (в нём, например, раздел "Фото"), а во второй "razd", может надо написать razdel AS razd? | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:00)
| | я вам расписал как должно быть
чисто теоретически таблица может состоять из одного поля, но на практике так не бывает ибо смысла в этом нет | |
|
|
|
|
|
|
|
для: Valick
(28.07.2011 в 23:41)
| | Так у меня и нет одного поля, в первой таблице - 2 поля (второе не относится к делу, поэтому и не указал его).
$res=mysql_query("SELECT razdel FROM table1 JOIN table2 using (razdel AS razd) GROUP BY table2.razd ORDER BY table2.data ASC");
|
У меня нет id_razd, есть razdel в table1 и razd в table12.
Так правильно? | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:08)
| | нет | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:12)
| | Не томите, как тогда? :( | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:12)
| | это вы уже меня начинаете утомлять, я вам написал на три поста выше как правильно
- как правильно сделать запрос
- как правильно организовать базу
еще раз повторяю таблица состоящая из одного поля не имеет смысла
___
у вас что razdel = фото и razd = фото? | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:16)
| | table1 (nomer,razdel,dop)
table2: (razd, zapis,data)
В первой таблице просто перечисляются разделы (фото, мото, авто..)
Во второй - записи по разделам ис датами добавления.
Например: отзыв о товаре таком-то(zapis) из раздела такого-то(razd) c датой добавления такой-то (data). | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:22)
| | и третий раз закинул старик невод.... ))
по каким полям осуществляется связь таблиц???
по идее должно быть razd=nomer, только вот что мешает нормально именовать поля не знаю | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:28)
| | table1 (nomer,razdel,dop)
table2: (razd, zapis,data)
В первой таблице просто перечисляются разделы (фото, мото, авто..)
Во второй - записи по разделам и с датами добавления.
Например: отзыв о товаре таком-то(zapis) из раздела такого-то(razd) c датой добавления такой-то (data).
Задача -
вывести список разделов(razdel) из table1 в таком порядке:
сначала разделы, которые есть таблице table1 с сегодняшней датой записи, а потом все остальные.
--------------------------
Раздел 1 - "фото" (table1)
РАздел 2 -"мото" (table1)....
Отзыв о "таком-то" из раздела "мото" 28.07.2011 (table2).
Что ещё нужно? Или вы прикалываетесь?
Содержание razd и razdel в обоих таблицах одинаково. | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:30)
| | Это вы прикалываетесь...
у вас неправильно организованы таблицы это раз
и при таком раскладе нафиг нужно выбирать из первой таблицы то что уже известно из второй таблицы это два
по вашему выражение
при условии razdel = razd
SELECT razdel FROM table WHERE razdel=razd
|
имеет смысл?
__
не знаю как у вас а у меня уже час ночи... мне не до приколов | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:40)
| | Таблица 1 с разделами создана, чтобы админ мог добавлять новые разделы.
Таблица 2 с записями создана, чтобы можно было добавлять отзывы по разделам.
Valick, я не силён в запросах, обрисовал вам картину. Если можете помогите, нет, значит, нет.. | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 00:42)
| |
SELECT razd FROM table2 GROUP BY razd ORDER BY `date` ASC
|
первая таблица тут нафиг не нужна...
она не пришей к звезде рукав.... | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:57)
| | Re:SELECT razd FROM table2 GROUP BY razd ORDER BY `date` ASC
Так выводит ЗАПИСИ ПО РАЗДЕЛАМ (разделы идут в строго определённом порядке),
а надо > РАЗДЕЛЫ ПО ЗАПИСЯМ (чтобы первыми шли разделы, где записи свежие по дате). | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 00:57)
| | Спасибо Valick, не то... | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 02:41)
| | Так выводит ЗАПИСИ ПО РАЗДЕЛАМ (разделы идут в строго определённом порядке)
вы уверены? так должно выводить записи разделов по возростанию даты
намеренно не стал менять ASC (который можно вообще не указывать, оставил для подсказки) на DESC | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 08:00)
| | Sorry, действительно сортирует по разделам (я забыл, так пробовал в самом начале),
НО выводит в каждом разделе по ОДНОЙ записи (хоть сколько не пиши в условии селекта - limit 10.)
А НАДО, чтобы выводило за сегодняшний день все сколько есть. Поэтому у меня и было 2 таблицы.... Увы, дело не сдвинулось... :( | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 11:44)
| |
SELECT razd FROM table2 ORDER BY razd ASC, `date` DESC
|
ну блииин)) ну не нужна тут первая таблица, ну хоть тресни не нужна)))
она нужна будет если правильно организовать таблицы и связь между ними | |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 12:57)
| | Вау! Да, действительно всё получилось! Спасиб! А я полночи мудрил и так и сяк....
А как ещё можно указать в условии, чтобы - если у нескольких разделов есть свежие записи, то первым выводился раздел "main1", вторым "main2", а потом уже все остальные??? | |
|
|
|
|
|
|
|
для: Владимир22
(29.07.2011 в 14:24)
| | ну блииин))
SELECT * FROM table2 ORDER BY `date` DESC, razd ASC
|
| |
|
|
|
|
|
|
|
для: Valick
(29.07.2011 в 18:55)
| | Так выводся все разделы в порядке их свежести по дате, а вот если надо какой раздел (например, "main") насильно по-любому сделать первым в выводе, то представляю где-то так:
SELECT * IF(razd== ' main',0,1) AS order_razd FROM table ORDER BY order_razd, `date` DESC, razd ASC limit 10
|
Valick, ещё раз спасибо, реальная помощь была. | |
|
|
|