Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Открыть новую тему     Написать ответ в эту тему

Sinicin



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте уважаемые. Сабж.
 
Имеются следующие таблицы:
users - пользователей, с полями:
id, name, city_id, cat_id
 
catalog - предприятий, с полями:
id, name
 
city - городов, с полями:
id, name
 
пользователь может принадлежать предприятию, тогда в таблице users в поле cat_id указан ID предприятия, иначе поле cat_id ='0'
примерно так:  
id=1, name='Василий', city_id='1', cat_id='1'
id=2, name='Иван', city_id='2', cat_id='0'
 
Запрос:
SELECT users.name, catalog.name, FROM users, catalog WHERE users.id = '1' AND catalog.id=users.cat_id
 
если у пользователя cat_id не '0' - то все нормально выводится, а если cat_id='0' то естественно выдает пустой ответ
 
Можно ли сделать запрос таким образом, чтобы при выборке если cat_id='0', то выводился город?
 
пробовал использовать IF() и IFNULL() , но наверное я не так понял их работу...
 
SELECT users.name, IF(catalog.name, catalog.name, city.name) FROM users, catalog, city WHERE users.id = '1' AND IFNULL(catalog.id=users.cat_id, users.city_id=city.id)
 
 
Помогите разобраться.

Всего записей: 23 | Зарегистр. 22-12-2005 | Отправлено: 00:36 21-02-2009
Ventil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем Hello.  
 
Помогите разрешить вопрос который в поисковике найти не смог.  
Есть две таблицы:  
 
table_a  
++++++++++++++++++++++++  
| position |   user   |   level   |  date  |  
++++++++++++++++++++++++  
|  main    | vasya   |    1       |  1215 |  
|  main    | misha   |    1       |  1215 |  
| second  | vovan   |    null    | 1215  |  
     ...           ...           ...          ...  
|  main    |   dima   |    4       |  1215 |  
++++++++++++++++++++++++  
 
table_b  
+++++++++++++++++++++++++++++++++++++++  
|    date   |   vasya   |   vovan   |   misha   |  dima   | ... | ... |    
+++++++++++++++++++++++++++++++++++++++  
|     1215   |      200   |      250   |     200    |    210  | ... | ... |  
|     1216   |      200   |      250   |     200    |    210  | ... | ... |  
|     1217   |      200   |      250   |     200    |    210  | ... | ... |  
|     1218   |      200   |      250   |     200    |    210  | ... | ... |  
+++++++++++++++++++++++++++++++++++++++  
 
Необходимо получить  
++++++++++++++++++++++++++++++++  
| position |   user   |   level   |  date  |     xxx      |  
++++++++++++++++++++++++++++++++  
|  main    | vasya   |    1       |  1215 |      250     |  
|  main    | misha   |    1       |  1215 |      200     |  
| second  | vovan   |    null    | 1215  |      250    |  
     ...           ...           ...          ...             ...      |  
|  main    |   dima   |    4       |  1215 |      210    |  
++++++++++++++++++++++++++++++++  
 
т.е. для значения table_a.user необходимо вытянуть знаяение для этого юзера из table_b

Всего записей: 107 | Зарегистр. 26-12-2002 | Отправлено: 20:44 21-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ventil

Цитата:
table_b  

довольно плохо продумана, если не сказать - неправильно
по этой причине не уверен, что можно будет сделать все как вам хочется просто запросами mysql


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:36 21-02-2009
Ventil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это да, но такое я получил в наследство.
Решил проблему через UNION

Всего записей: 107 | Зарегистр. 26-12-2002 | Отправлено: 15:20 23-02-2009
max2k1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinicin
SELECT
  u.name,
  CASE WHEN cat.id IS NULL THEN c.name ELSE cat.name END
FROM users u
INNER JOIN city c ON u.city_id = c.id
LEFT OUTER JOIN catalog cat ON u.cat_id = cat.id

Всего записей: 41 | Зарегистр. 14-12-2005 | Отправлено: 12:31 05-03-2009
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть две БД на разных серверах, ну это не важно. Они в принципе идентичны. Должно быть одно отличие: в одной имеются линки вида мойдомен.ком, во второй мойдмен.орг. Если вдруг ситуация нештатная, я снимаю дамп с одной базы и лью на вторую.
Теперь вопрос: как проще всего во всей бд заменить все найденные ссылки вида  мойдомен.ком на мойдмен.орг?

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 00:02 25-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
Теперь вопрос: как проще всего во всей бд заменить все найденные ссылки вида  мойдомен.ком на мойдмен.орг?

обычным способом
 
UPDATE tablename SET column=REPLACE(column,'мойдомен.ком','мойдмен.орг')

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:19 25-03-2009
SparcoCF

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть три поля:

Код:
<form action="" method="get">
<input type="text" name="textfield" id="textfield" />
<input type="text" name="textfield2" id="textfield2" />
<input type="text" name="textfield3" id="textfield3" />
 
<input name="OK" type="submit" value="Submit" />
</form>

 
После нажатия на кнопку, должен сформулироваться mysql запрос который сделает апдейт(обновит) данные в таблицу такого формата:
 
id number
1 1000
2 2000
3 3000
 
если в текстовые поля я ввел 4000; 5000; 6000;
таблица должна приобрести такой вид:
id number
1 4000
2 5000
3 6000

Всего записей: 110 | Зарегистр. 21-03-2009 | Отправлено: 22:11 05-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SparcoCF

Цитата:
если в текстовые поля я ввел 4000; 5000; 6000;
таблица должна приобрести такой вид:  

ну вот и делаете 3 запроса. по одному запросу на поле формы


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:15 05-05-2009 | Исправлено: Cheery, 22:15 05-05-2009
SparcoCF

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
И как это сделать ?
Что то типа этого ?

Код:
<form action="" method="get">
<input type="text" name="<?php $request=("UPDATE employee_data SET salary=4000 WHERE id='1';"); ?>" id="textfield" />
<input type="text" name="<?php $request=("UPDATE employee_data SET salary=5000 WHERE id='1';"); ?>" id="textfield2" />
<input type="text" name="<?php $request=("UPDATE employee_data SET salary=6000 WHERE id='1';"); ?>" id="textfield3" />
 
<input name="OK" type="submit" value="Submit" />
</form>
 
 
Скорее всего что это полнейший бред, подскажите как это сделать .. любой пример.

Всего записей: 110 | Зарегистр. 21-03-2009 | Отправлено: 23:06 06-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SparcoCF

Цитата:
Что то типа этого ?  

вы тему просмотрели? полно примеров
Примитивный примерчик работы с БД MySQL из PHP
подключились.. сделали запрос
mysql_connect(...смотрите пример...);
mysql_query("UPDATE employee_data SET salary=".intval($_REQUEST['textfield'])." WHERE id=1");
mysql_query("UPDATE employee_data SET salary=".intval($_REQUEST['textfield2'])." WHERE id=2");
mysql_query("UPDATE employee_data SET salary=".intval($_REQUEST['textfield3'])." WHERE id=3");
 
к примеру


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:10 06-05-2009 | Исправлено: Cheery, 23:11 06-05-2009
Tstf



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Может кто подскажет. Есть запрос
 
SELECT g.id as id, g.name as name, g.brand_id as brand_id, g.image as image, g.sef_name as sef_name, avg(r.rating) as rating, min(gv.price) as price, max(gv.price) as maxprice FROM catalog_goods g left join catalog_ratings r on (g.id = r.good_id) left join catalog_goods_vendors gv on (g.id = gv.good_id) WHERE g.subsection_id=1 AND ( g.id in (-1) ) GROUP BY 1,2,3,4,5 ORDER BY name LIMIT 0,15
 
Что в нем означает
 
g.id in (-1)  
 
?

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 00:48 13-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tstf

Цитата:
Что в нем означает
 
g.id in (-1)  

g.id=-1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:49 13-05-2009
Tstf



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А что это означает? Типо все выводить?

----------
Заработок 2.0

Всего записей: 788 | Зарегистр. 22-04-2003 | Отправлено: 07:35 13-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tstf

Цитата:
А что это означает?

то и означает - выборка элементов где catalog_goods.id=-1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:26 13-05-2009
roma



skydiver
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравствуйте. с sql плотно не работал давно поэтому возможно буду спрашивать достаточно глупые вопросы
табличка tabl1 - id ключевое поле.
+----+---------+------------+
| id | potokId | nositelHi  |
+----+---------+------------+
|  1 | aaa     | 55700      |
|  2 | aaa     | OP601-61-1 |
|  3 | aaa     | OP602-61-1 |
|  4 | aaa     | OP603-61-1 |
|  5 | aaa     | 55730      |
|  6 | bbb     | 55700      |
|  7 | bbb     | OP601-61-1 |
|  8 | bbb     | OP602-61-1 |
|  9 | bbb     | 55740      |
+----+---------+------------+
1. как бы мне получить nositelHi like '557%' для одного potokId где id минимальна или максимальна? я пока делаю
Код:
select nositelHi from tabl1
where id=(select min(id) from tabl1 where potokId='aaa' and nositelHi like '557%');

может есть попроще способ?
2. как бы мне составить запрос чтобы получить эти значения в одной строке в разных столбцах с именами допустим _ot и _do. union зараза даёт результат в одном столбце

Код:
(select nositelHi as _ot from tabl1
where id=(select min(id) from tabl1 where potokId='aaa' and nositelHi like '557%'))
union
(select nositelHi as _do from tabl1
where id=(select max(id) from tabl1 where potokId='aaa' and nositelHi like '557%'));

 
Добавлено:
пункт 2 решил довольно поизвращенски (как мне кажется) может есть способ попроще?
просто я ещё не определился на чём буду реализовывать параллельно веду разработку в аксесе и в майскюэле.

Код:
select max(_ot),max(_do) from (
select * from (select potokId, nositelHi as _ot,0 as _do from tabl1
where id=(select min(id) from tabl1 where potokId='aaa' and nositelHi like '557%')) as _first
union
select * from ( select potokId,0 as _ot, nositelHi as _do from tabl1
where id=(select max(id) from tabl1 where potokId='aaa' and nositelHi like '557%')) as _second
) as _itogo group by potokId;
 

Всего записей: 2908 | Зарегистр. 10-09-2001 | Отправлено: 18:57 22-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
как бы мне получить nositelHi like '557%' для одного potokId где id минимальна или максимальна? я пока делаю  

select * from tablename where nositelHi like '557%' order by potokId  desc limit 1
select * from tablename where nositelHi like '557%' order by potokId  limit 1
 

Цитата:
как бы мне составить запрос чтобы получить эти значения в одной строке в разных столбцах с именами допустим _ot и _do. union зараза даёт результат в одном столбце  

по какому параметру "между"??

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:55 22-05-2009 | Исправлено: Cheery, 19:56 22-05-2009
roma



skydiver
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
select * from tablename where nositelHi like '557%' order by potokId  desc limit 1  
select * from tablename where nositelHi like '557%' order by potokId  limit 1  

о! я понял. только сортировка не по potokId а по id (там автоинкремент). potokId='aaa' это условие

Код:
select * from tabl1 where nositelHi like '557%' and potokId='aaa' order by id desc limit 1 ;
select * from tabl1 where nositelHi like '557%' and potokId='aaa' order by id limit 1 ;

(вот кстати ещё один аргумент почему я сделал дубль - нет лимита в аксессе или я его не нашёл)

Цитата:
по какому параметру "между"??

предполагается что для одного значения potokId существует только два значения nositelHi like '557%' т.е. в _ot должно попасть значение где id меньше а в _do где id больше. впринципе кто-то может слажать и в таблице случайно одному potokId='aaa' будут соотвествовать три значения nositelHi like '557%' но всё равно в _ot должно попасть то значение id которого минимально а в _do id которого максимально
т.е. сейчас работает конструкция

Код:
select potokId,max(_ot),max(_do) from (
select * from (
select potokId,nositelHi as _ot,0 as _do from tabl1 where nositelHi like '557%' and potokId='aaa' order by id limit 1
) as _first
union
select * from (
select potokId,0 as _ot, nositelHi as _do from tabl1 where nositelHi like '557%' and potokId='aaa' order by id desc limit 1
) as _second
) as _itogo group by potokId;
 

но она много чего "предполагает" т.е. например того что nositelHi like '557%' обязательно число. но это может оказатсья и не так.

Всего записей: 2908 | Зарегистр. 10-09-2001 | Отправлено: 09:15 23-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но она много чего "предполагает" т.е. например того что nositelHi like '557%' обязательно число. но это может оказатсья и не так.

select nositelHi as _ot from tabl1
where id>=(select min(id) from tabl1 where potokId='aaa' and nositelHi like '557%')
AND
id<=(select max(id) from tabl1 where potokId='aaa' and nositelHi like '557%')  
только какой смысл в этом.. если и так выберутся все id


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:00 23-05-2009 | Исправлено: Cheery, 21:01 23-05-2009
bubliy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите вывести телепрограмму, есть таблица с полями p_id, p_hour, p_minute, p_title - необходимо вывести все, начиная с текщего события.  
 
Например если сейчас 17:20, а в программе события внесены в 16:40 и 17:50, то нужно, чтобы первая запись была 16:40.

Всего записей: 22 | Зарегистр. 26-05-2009 | Отправлено: 10:16 01-06-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru