Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод из одной таблицы с условием из второй
 
 автор: Владимир22   (28.07.2011 в 22:13)   письмо автору
 
 

Есть две таблицы
- 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")); 

  Ответить  
 
 автор: Valick   (28.07.2011 в 22:41)   письмо автору
 
   для: Владимир22   (28.07.2011 в 22:13)
 

опишите сущности таблиц, а т не понятно от чьей ....

  Ответить  
 
 автор: Владимир22   (28.07.2011 в 22:45)   письмо автору
 
   для: Valick   (28.07.2011 в 22:41)
 

Так всё вроде и описал, вывести из первой таблицы разделы в следующем порядке:
сначала те, что во второй таблице есть с сегодняшней датой, а далее все остальные - по убыванию даты.

  Ответить  
 
 автор: Valick   (28.07.2011 в 22:52)   письмо автору
 
   для: Владимир22   (28.07.2011 в 22:45)
 

мне по барабану (на данном этапе что и куда нужно вывести), я хочу знать что содержится в в первой таблице, а что во второй и чем они связаны друг с другом.
Я спрашиваю не потому что мне делать нефига, а потому что для корректного ответа нужно понимать суть проблемы.
__
я подозреваю что нужно что-то типа этого, только там одна таблица, а у вас две

  Ответить  
 
 автор: Владимир22   (28.07.2011 в 23:04)   письмо автору
 
   для: Valick   (28.07.2011 в 22:52)
 

В первой таблице - просто разделы
Во второй - записи по разделам и с датами.

  Ответить  
 
 автор: Valick   (28.07.2011 в 23:31)   письмо автору
 
   для: Владимир22   (28.07.2011 в 23:04)
 

я кажется понял что вам нужно, но это не совсем то о чем вы просите, тут все гораздо проще
дайте точные названия полей (и еще раз спрашиваю по какому полю связаны таблицы)
table1: поле razdel тут должен быть по крайней мере хотя бы идентификатор строки

  Ответить  
 
 автор: Valick   (28.07.2011 в 23:41)   письмо автору
 
   для: Владимир22   (28.07.2011 в 23:04)
 

ладно, включаю третий глаз...
таблица1
id_razd | name_razd

таблица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

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:00)   письмо автору
 
   для: Valick   (28.07.2011 в 23:41)
 

В первой таблице название поле "razdel" (в нём, например, раздел "Фото"), а во второй "razd", может надо написать razdel AS razd?

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:09)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:00)
 

я вам расписал как должно быть
чисто теоретически таблица может состоять из одного поля, но на практике так не бывает ибо смысла в этом нет

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:08)   письмо автору
 
   для: 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.
Так правильно?

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:12)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:08)
 

нет

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:12)   письмо автору
 
   для: Valick   (29.07.2011 в 00:12)
 

Не томите, как тогда? :(

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:16)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:12)
 

это вы уже меня начинаете утомлять, я вам написал на три поста выше как правильно
- как правильно сделать запрос
- как правильно организовать базу
еще раз повторяю таблица состоящая из одного поля не имеет смысла
___
у вас что razdel = фото и razd = фото?

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:22)   письмо автору
 
   для: Valick   (29.07.2011 в 00:16)
 

table1 (nomer,razdel,dop)
table2: (razd, zapis,data)
В первой таблице просто перечисляются разделы (фото, мото, авто..)
Во второй - записи по разделам ис датами добавления.
Например: отзыв о товаре таком-то(zapis) из раздела такого-то(razd) c датой добавления такой-то (data).

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:28)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:22)
 

и третий раз закинул старик невод.... ))
по каким полям осуществляется связь таблиц???
по идее должно быть razd=nomer, только вот что мешает нормально именовать поля не знаю

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:30)   письмо автору
 
   для: 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 в обоих таблицах одинаково.

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:40)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:30)
 

Это вы прикалываетесь...
у вас неправильно организованы таблицы это раз
и при таком раскладе нафиг нужно выбирать из первой таблицы то что уже известно из второй таблицы это два
по вашему выражение
при условии razdel = razd
SELECT razdel FROM table WHERE razdel=razd

имеет смысл?
__
не знаю как у вас а у меня уже час ночи... мне не до приколов

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 00:42)   письмо автору
 
   для: Valick   (29.07.2011 в 00:40)
 

Таблица 1 с разделами создана, чтобы админ мог добавлять новые разделы.
Таблица 2 с записями создана, чтобы можно было добавлять отзывы по разделам.
Valick, я не силён в запросах, обрисовал вам картину. Если можете помогите, нет, значит, нет..

  Ответить  
 
 автор: Valick   (29.07.2011 в 00:57)   письмо автору
 
   для: Владимир22   (29.07.2011 в 00:42)
 

SELECT razd FROM table2 GROUP BY razd ORDER BY `date` ASC

первая таблица тут нафиг не нужна...
она не пришей к звезде рукав....

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 02:40)   письмо автору
 
   для: Valick   (29.07.2011 в 00:57)
 

Re:SELECT razd FROM table2 GROUP BY razd ORDER BY `date` ASC

Так выводит ЗАПИСИ ПО РАЗДЕЛАМ (разделы идут в строго определённом порядке),
а надо > РАЗДЕЛЫ ПО ЗАПИСЯМ (чтобы первыми шли разделы, где записи свежие по дате).

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 02:41)   письмо автору
 
   для: Valick   (29.07.2011 в 00:57)
 

Спасибо Valick, не то...

  Ответить  
 
 автор: Valick   (29.07.2011 в 08:00)   письмо автору
 
   для: Владимир22   (29.07.2011 в 02:41)
 

Так выводит ЗАПИСИ ПО РАЗДЕЛАМ (разделы идут в строго определённом порядке)
вы уверены? так должно выводить записи разделов по возростанию даты
намеренно не стал менять ASC (который можно вообще не указывать, оставил для подсказки) на DESC

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 11:44)   письмо автору
 
   для: Valick   (29.07.2011 в 08:00)
 

Sorry, действительно сортирует по разделам (я забыл, так пробовал в самом начале),
НО выводит в каждом разделе по ОДНОЙ записи (хоть сколько не пиши в условии селекта - limit 10.)
А НАДО, чтобы выводило за сегодняшний день все сколько есть. Поэтому у меня и было 2 таблицы.... Увы, дело не сдвинулось... :(

  Ответить  
 
 автор: Valick   (29.07.2011 в 12:57)   письмо автору
 
   для: Владимир22   (29.07.2011 в 11:44)
 

SELECT razd FROM table2 ORDER BY razd ASC, `date` DESC

ну блииин)) ну не нужна тут первая таблица, ну хоть тресни не нужна)))
она нужна будет если правильно организовать таблицы и связь между ними

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 14:24)   письмо автору
 
   для: Valick   (29.07.2011 в 12:57)
 

Вау! Да, действительно всё получилось! Спасиб! А я полночи мудрил и так и сяк....
А как ещё можно указать в условии, чтобы - если у нескольких разделов есть свежие записи, то первым выводился раздел "main1", вторым "main2", а потом уже все остальные???

  Ответить  
 
 автор: Valick   (29.07.2011 в 18:55)   письмо автору
 
   для: Владимир22   (29.07.2011 в 14:24)
 

ну блииин))
SELECT * FROM table2 ORDER BY `date` DESC, razd ASC

  Ответить  
 
 автор: Владимир22   (29.07.2011 в 20:02)   письмо автору
 
   для: 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, ещё раз спасибо, реальная помощь была.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования