Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Помогите с запросом

Есть 2 таблицы

OQ
Код

CREATE TABLE "oq" (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `oid`    INTEGER,
    `qid`    INTEGER,
    `cnt`    INTEGER DEFAULT 0
)


OQV
Код

CREATE TABLE "oqv" (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `oid`    INTEGER,
    `qid`    INTEGER,
    `variant`    INTEGER,
    `cnt`    INTEGER DEFAULT 0
)


oid, qid в обеих таблицах одинаковы

Задача получить один qid (неважно из какой таблицы) и oqv.variant, где  (oqv.cnt+1)/(oq.cnt+1) имеет максимальное значение

Помогите пожалуйста, уже всю голову сломал
Мозга хватает на (пример для obj = 1):
Код

SELECT oqv.qid, oqv.variant, ((oqv.cnt+1)/(oq.cnt+1)) as pba FROM oqv, oq WHERE oqv.qid = oq.qid AND oq.oid = 1 ORDER BY pba DESC LIMIT 1


Но в результате получаю только 1, 1, 1... Т.е. в любом случае только первую запись


Это сообщение отредактировал(а) Error202 - 21.7.2016, 13:08
Ответ:
Есть 2 таблицы

OQ
Код

CREATE TABLE "oq" (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `oid`    INTEGER,
    `qid`    INTEGER,
    `cnt`    INTEGER DEFAULT 0
)


OQV
Код

CREATE TABLE "oqv" (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `oid`    INTEGER,
    `qid`    INTEGER,
    `variant`    INTEGER,
    `cnt`    INTEGER DEFAULT 0
)


oid, qid в обеих таблицах одинаковы

Задача получить один qid (неважно из какой таблицы) и oqv.variant, где  (oqv.cnt+1)/(oq.cnt+1) имеет максимальное значение

Помогите пожалуйста, уже всю голову сломал
Мозга хватает на (пример для obj = 1):
Код

SELECT oqv.qid, oqv.variant, ((oqv.cnt+1)/(oq.cnt+1)) as pba FROM oqv, oq WHERE oqv.qid = oq.qid AND oq.oid = 1 ORDER BY pba DESC LIMIT 1


Но в результате получаю только 1, 1, 1... Т.е. в любом случае только первую запись


Это сообщение отредактировал(а) Error202 - 21.7.2016, 13:08
Вопрос: Помогите составить запрос выбрать n предыдущих строк с учётом ORDER BY

Уважаемые форумчане, помогите составить запрос.
Есть некоторый запрос типа SELECT * FROM table ORDER BY field.
В table есть колонка id.
Задано некоторое конкретное id( пусть равное 8)
нужно взять несколько строк из результата запроса, стоящих перед id=8.
field может быть составным, потому использовать его во WHERE нежелательно
Ответ:
RenusAvin
Уважаемые форумчане, помогите составить запрос.
Есть некоторый запрос типа SELECT * FROM table ORDER BY field.
В table есть колонка id.
Задано некоторое конкретное id( пусть равное 8)
нужно взять несколько строк из результата запроса, стоящих перед id=8.
field может быть составным, потому использовать его во WHERE нежелательно



приведите конкретный пример.
то у вас по ИД надо сортировать, то по какомутп "филду"
Вопрос: Помогите пожалуйста правильно составить запрос

Есть три таблицы:

select * from jobs;
+--------+----------+------------------+-------------+-------------+--------------+--------+------------+----------+
| num_dt | num_sort | status_dt | exchange_dt | name_dt | group_obj_id | obj_id | date_dt | time_dt |
+--------+----------+------------------+-------------+-------------+--------------+--------+------------+----------+
| 2 | 1 | работает | 0 | delete_site | 2 | 4 | 2016-09-14 | 01:10:30 |
+--------+----------+------------------+-------------+-------------+--------------+--------+------------+----------+

select * from group_obj;
+--------+----------------+----------+
| num_dt | name_dt | table_dt |
+--------+----------------+----------+
| 1 | Сервера | servers |
| 2 | Домены | domains |
| 3 | Темы | thems |
+--------+----------------+----------+

select * from domains;
+--------+------------+-----------+
| num_dt | name_dt | server_id |
+--------+------------+-----------+
| 4 | ramfish.ru | 13 |
| 5 | site-1.ru | 14 |
+--------+------------+-----------+

Мне нужно выбрать сайт ramfish.ru из таблицы domains в подзапросе.
Основной запрос идет в таблицу jobs, потом по полю из этой таблицы group_obj_id в подзапросе получаем поле table_dt (у которого значение domains) и это значение domains послужит значением таблицы для подзапроса который вернет уже поле name_dt (у которого значение ramfish.ru)

Вот я сделал запрос:
select SQL_CALC_FOUND_ROWS num_dt as num_line, (select name_dt from (select table_dt from group_obj where num_dt=t.group_obj_id limit 1) as t1 where num_dt=t.obj_id limit 1) as obj_dt from jobs as t order by num_dt LIMIT 0, 100
но он не работает, выдает Column not found: 1054 Unknown column 't.group_obj_id' in 'where clause''

Помогите пожалуйста правильно составить запрос.
Ответ: Ну и все подзапросы (включая вложенные) должны иметь имена-алиасы. А алиасы таблиц/запросов в именах полей указывать без ошибок.
Вопрос: Помогите составить запрос (JOIN, MAX и Groupe By)

Добрый день.
Помогите, пожалуйста, составить запрос для MySQL.
Есть 2 таблицы: mat и mat_documents

Нужно отобразить максимальный номер документа (с данными всей строки) в разрезе групп материалов (mat.groupe).
Более понятно я максимально набросал в примере в приложении к сообщению.

Практически удалось сформировать запрос:

SELECT max(b.docnu), a.title, a.groupe,b.amount FROM mat_documents a
RIGHT JOIN mat d ON a.id_mat=b.id_mat
GROUP BY a.groupe

Проблема у меня осталась в том, что в моём запросе выбирается только максимальный номер документа, а для остальных данных строки нельзя применить max (например, title). Моя задача должна решаться как-то изящнее, но никак не получается... помогите :)

Заранее спасибо!

P.S. Все подробности в файле.

К сообщению приложен файл (Книга1.xlsx - 9Kb)
Ответ:
tanglir
plosion87
Ребят, составил запрос по предложенному шаблону
где в шаблоне внешний групбай? где у вас условие связи по двум полям?


Я же приложил пример, в моей задаче исходные данные такие, что шаблонный пример пришлось модифицировать, поэтому отвечая на Ваши вопросы:
1)Нужна группировка по полю группы материалов, которая есть только в таблице mat, поэтому пришлось использовать помимо внутренней, ещё и внешнюю группировку.
2)По поводу условия связи его тоже нету, т.к. поле MAX(t2.field2) AS field2 - есть только в одной таблице mat_documents, поэтому с чем его связывать не очень понятно.
Вопрос: Помогите составить запрос qRate_Period

Добрый день,
помогите, пожалуйста, в прикрепленной БД составить запрос qRate_Period.
Краткая справка. В запросе qPeriod есть перечень периодов Год - Месяц. В запросе qPeriod_Rate к каждому периоду необходимо подставить тариф (Rate), действующий в данном периоде. Тарифы находятся в таблице tRate. Год - Месяц в данной таблице означают период начала действия тарифа.
Запрос qPeriod_Rate составлен с использованием left join, все нулы необходимо заменить на тариф.

Заранее благодарен за помощь.

К сообщению приложен файл (Пример.zip - 19Kb)
Ответ:
-Практикант-
dmitriy_po
А есть вариант с джоинами?

SELECT Z.YEAR_, Z.MTH_NUM, R.Rate
FROM (SELECT P.YEAR_, P.MTH_NUM, Max(R.Dat) As MaxDat
      FROM qPeriod As P INNER JOIN qRate As R ON P.Period>=R.Dat
      GROUP BY P.YEAR_, P.MTH_NUM) As Z
INNER JOIN qRate As R ON Z.MaxDat=R.Dat

где qRate запрос
SELECT DateSerial(YEAR_, MTH_NUM,1) AS Dat, RATE
FROM tRate


Благодарю за помощь! Все получилось.
Вопрос: Помогите пожалуйста найти ошибку

Есть запрос:
SELECT `id`,

(SELECT  SUM(`totalPrice`) FROM (
SELECT `subGoodId`, `subGoodQuantity`, `totalPrice` FROM
(
SELECT `subGoodId`, `subGoodQuantity`,

( SELECT `price` FROM `tbl_catalog_catalog_prices` WHERE `objectId` = `subGoodId` ) AS `price`,
( (SELECT `price` FROM `tbl_catalog_catalog_prices` WHERE `objectId` = `subGoodId`) * `subGoodQuantity` ) AS `totalPrice`

FROM `tbl_catalog_subgoods` WHERE `goodId` = 1608
    )
    as newTable    
) as newTableSum) AS `priceCalculated`

FROM `tbl_catalog_catalog` WHERE `id` NOT IN (SELECT `objectId` FROM `tbl_catalog_catalog_prices`)
Срабатывает правильно. Но мне нужно чтобы он работал динаминчо в таком виде:

SELECT `id`,

(SELECT  SUM(`totalPrice`) FROM (
SELECT `subGoodId`, `subGoodQuantity`, `totalPrice` FROM
(
SELECT `subGoodId`, `subGoodQuantity`,

( SELECT `price` FROM `tbl_catalog_catalog_prices` WHERE `objectId` = `subGoodId` ) AS `price`,
( (SELECT `price` FROM `tbl_catalog_catalog_prices` WHERE `objectId` = `subGoodId`) * `subGoodQuantity` ) AS `totalPrice`

FROM `tbl_catalog_subgoods` WHERE `goodId` = `id`
    )
    as newTable    
) as newTableSum) AS `priceCalculated`

FROM `tbl_catalog_catalog` WHERE `id` NOT IN (SELECT `objectId` FROM `tbl_catalog_catalog_prices`)
то есть WHERE `goodId` должен равняться не 1608, а должен равняться `id` из первой строчки.

Во втором случае запрос работает неправильно.
Понимаю что проблема в присвоении `goodId` = `id`, но не знаю как исправить.
Помогите пожалуйста.
Заранее спасибо.
Ответ:
sqlNovyi
Этот запрос (алгоритм) у меня получилось написать для отдельного товара (id).

Ну так и используйте его как коррелированный подзапрос в качестве второго аргумента функции COALESCE().
+

sqlNovyi
Есть таблица

Таблицы принято давать в форме CREATE TABLE. Удалив всё лишнее для сути вопроса, само собой.
Вопрос: Помогите синтаксисом запроса NOCHECK CONSTRAINT all

Приветствую, форумчане.

Помогите, пожалуйста с синтаксисом запроса на отключение проверки FOREIGN KEY во всей таблице.
нагуглил такой вариант

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 


Выдает ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all' at line 1


Какой все таки правильный синтаксис запроса?

Спасибо
Ответ:
catpirat
anvano,
) Я знаю что мне нужно.
Для того что бы импортровать что то в базу,
мне что нужно выучить всю документацию по MYSQL?
И потом корчить из себя умника тут на сайте ?
Кидать ссылки на ненужные талмуды инфы.



P.s не понимаю как вообще запрос с в базу может работать без слова PUTIN

если ты знаешь, что тебе нужно - зачем спрашиваешь?
и стаким подходом, отвечать всякое желание пропадает....
Вопрос: Помогите сделать запрос между двумя таблицами

Добрый день.

Помогите, пожалуйста, сделать запрос между двумя таблицами:
tab1_product_position:
id_product;
id_category;
position.

tab2_product:
id_product;
price;
id_category.

Нужно сделать два запроса:
1) В первой таблице отсортировать продукты каждой категории (например id=2) по позициям (1,2,3,4..n), с учетом цен этих продуктов, которые находятся во второй таблице, чтобы сортировка получилась по цене, от наименьшей к наибольшей.

2) Во второй таблице сделать тоже самое, только есть общая категория продуктов (например id=1) и в ней нужно сортировать продукты еще с таким условием, чтобы продукты из разных подкатегорий выводились по 4 элемента и затем сменялись 4 элементами другой подкатегории, но также сортировались с учетом цен по позициям, от наименьшей к наибольшей.

Спасибо.
Ответ: Хотите, чтобы мы за Вас всю работу сделали? Тут могут помочь поправить Ваши ошибки, подсказать как сделать более оптимально и т.д. и т.п., но полностью за Вас делать ваши примеры - дураков нет!

Покажите как Вы пытались решить задачу сами и вам подскажут в какую сторону копать дальше.
Вопрос: Помогите сделать запрос к БД

Помогите прописать запросы online.php к БД,буду очень благодарен кто поможет.Фаилы приложил к теме.


вот файл online.php

автор
<?php
session_start();
$session=session_id();
$time=time();
$time_check=$time-600; //SET TIME 10 Minute
$tbl_name="user_online"; // Table name
$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count=="0"){
$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
$result1=mysql_query($sql1);
}
else {
"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
$result2=mysql_query($sql2);
}
$sql3="SELECT * FROM $tbl_name";
$result3=mysql_query($sql3);
$count_user_online=mysql_num_rows($result3);
echo "$count_user_online";
$sql4="DELETE FROM $tbl_name WHERE time<$time_check";
$result4=mysql_query($sql4);
?>



вот БД

автор
--
-- Структура таблицы `game1`
--

CREATE TABLE IF NOT EXISTS `game1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(70) NOT NULL,
`username` varchar(70) NOT NULL,
`item` text,
`color` text,
`value` text,
`avatar` varchar(512) NOT NULL,
`image` text NOT NULL,
`from` text NOT NULL,
`to` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


--
-- Структура таблицы `games`
--

CREATE TABLE IF NOT EXISTS `games` (
`id` int(11) NOT NULL DEFAULT '0',
`starttime` int(11) NOT NULL,
`cost` text,
`winner` varchar(128) NOT NULL,
`userid` varchar(70) NOT NULL,
`percent` varchar(10) DEFAULT NULL,
`itemsnum` int(11) NOT NULL,
`module` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `games`
--

INSERT INTO `games` (`id`, `starttime`, `cost`, `winner`, `userid`, `percent`, `itemsnum`, `module`) VALUES
(1, 2147483647, '0', '', '', NULL, 0, '');

-- --------------------------------------------------------

--
-- Структура таблицы `info`
--

CREATE TABLE IF NOT EXISTS `info` (
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `info`
--

INSERT INTO `info` (`name`, `value`) VALUES
('current_game', '1'),
('state', 'waiting'),
('rake', '10'),
('minbet', '2'),
('maxitems', '15');

-- --------------------------------------------------------

--
-- Структура таблицы `items`
--

CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`cost` text NOT NULL,
`lastupdate` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=40 ;

--
-- Дамп данных таблицы `items`
--

INSERT INTO `items` (`id`, `name`, `cost`, `lastupdate`) VALUES
(13, 'Five-SeveN%20|%20Orange%20Peel%20(Field-Tested)', '0.06', '1433104160'),
(5, 'P250%20|%20Steel%20Disruption%20(Factory%20New)', '0.24', '1431774638'),
(4, 'UMP-45%20|%20Urban%20DDPAT%20(Field-Tested)', '0.04', '1431774638'),
(7, 'Nova%20|%20Ghost%20Camo%20(Factory%20New)', '0.28', '1431781594'),
(28, 'Operation%20Vanguard%20Weapon%20Case', '0.05', '1433503277'),
(9, 'Nova%20|%20Polar%20Mesh%20(Field-Tested)', '0.03', '1431781595'),
(10, 'MP7%20|%20Forest%20DDPAT%20(Field-Tested)', '0.04', '1431781595'),
(11, 'SSG%2008%20|%20Blue%20Spruce%20(Field-Tested)', '0.04', '1433104159'),
(12, 'M4A1-S%20|%20Boreal%20Forest%20(Battle-Scarred)', '0.18', '1433104160'),
(14, 'UMP-45%20|%20Urban%20DDPAT%20(Well-Worn)', '0.04', '1433104968'),
(15, 'Chroma%20Case', '0.05', '1433105881'),
(16, 'Operation%20Breakout%20Weapon%20Case', '0.04', '1433105910'),
(17, 'Operation%20Phoenix%20Weapon%20Case', '0.06', '1433105910'),
(18, 'MP9%20|%20Deadly%20Poison%20(Field-Tested)', '0.08', '1433153102'),
(19, 'SCAR-20%20|%20Grotto%20(Field-Tested)', '0.09', '1433153264'),
(20, 'MAG-7%20|%20Heaven%20Guard%20(Factory%20New)', '0.1', '1433153265'),
(21, 'Galil%20AR%20|%20Sandstorm%20(Field-Tested)', '0.12', '1433153265'),
(22, 'Glock-18%20|%20Catacombs%20(Minimal%20Wear)', '0.09', '1433155232'),
(23, 'Dual%20Berettas%20|%20Contractor%20(Field-Tested)', '0.04', '1433453290'),
(24, 'M249%20|%20Contrast%20Spray%20(Field-Tested)', '0.04', '1433503274'),
(25, 'Dual%20Berettas%20|%20Contractor%20(Minimal%20Wear)', '0.04', '1433503275'),
(26, 'SG%20553%20|%20Waves%20Perforated%20(Well-Worn)', '0.03', '1433503276'),
(27, 'P250%20|%20Sand%20Dune%20(Minimal%20Wear)', '0.04', '1433503276'),
(29, 'FAMAS%20|%20Colony%20(Field-Tested)', '0.03', '1433503277'),
(30, 'Sawed-Off%20|%20Origami%20(Minimal%20Wear)', '0.14', '1433503278'),
(31, 'P90%20|%20Module%20(Minimal%20Wear)', '0.13', '1433503279'),
(32, 'AK-47%20|%20Elite%20Build%20(Battle-Scarred)', '0.43', '1433506775'),
(33, 'CZ75-Auto%20|%20Pole%20Position%20(Battle-Scarred)', '0.38', '1433506775'),
(34, 'P250%20|%20Valence%20(Minimal%20Wear)', '0.29', '1433506776'),
(35, 'SG%20553%20|%20Army%20Sheen%20(Factory%20New)', '0.05', '1433508379'),
(36, 'MP9%20|%20Storm%20(Battle-Scarred)', '0.04', '1433508379'),
(37, 'MP9%20|%20Storm%20(Field-Tested)', '0.04', '1433508380'),
(38, 'SG%20553%20|%20Waves%20Perforated%20(Battle-Scarred)', '0.04', '1433508380'),
(39, 'M4A4%20|%20??%20(Dragon%20King)%20(Field-Tested)', '1.95', '1433520065');

-- --------------------------------------------------------

--
-- Структура таблицы `messages`
--

CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(70) NOT NULL,
`msg` text NOT NULL,
`from` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Дамп данных таблицы `messages`
--

-- --------------------------------------------------------

--
-- Структура таблицы `queue`
--

CREATE TABLE IF NOT EXISTS `queue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(70) NOT NULL,
`token` varchar(128) NOT NULL,
`items` text NOT NULL,
`status` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


-- --------------------------------------------------------

--
-- Структура таблицы `rakeitems`
--

CREATE TABLE IF NOT EXISTS `rakeitems` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


-- --------------------------------------------------------

--
-- Структура таблицы `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`steamid` varchar(70) NOT NULL,
`tlink` varchar(255) DEFAULT NULL,
`won` float DEFAULT '0',
`admin` int(11) NOT NULL,
`name` varchar(128) NOT NULL,
`avatar` varchar(255) NOT NULL,
`games` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


К сообщению приложен файл (фаилы.zip - 2Kb)
Ответ: tanglir,

да ладно, эти функции скоро вообще уберут с php )))
потом будет вопрос как на PDO или Mysqli написать теже запросы...

Ну, а я помог чем с мог, дать все готовое, значит не дать возможности человеку самому научиться, что то сделать.
Вопрос: Помогите написать запрос

есть таблица в БД "kino"
2 поля: название фильма "title" и актер играющий роль "actor"
нужно выбрать все фильмы где играют роль определенные 2 актера вместе
вот мой запрос, он конечно не работает(
SELECT `title` FROM `kino` WHERE `actor`="Вася" AND `actor`="Петя"
помогите исправить запрос?
Ответ: amf1k,
1) сначала нужно определиться с данными: если в таблице два столбца(фильм, актер), то записи различаются только по этим двум признакам. Если такая таблица устраивает, то

2) создаем ключ(фильм, актер), чтобы избежать дубликатов (реляционная таблица)

3) Допустим мы узнаем, что есть разные фильмы с одним и тем же названием, и нам нужно выводить информацию отдельно по каждому фильму. т.е. получается, что начальная таблица не решает поставленную задачу. Что можно сделать? Можно добавить столбец фильм_идентити (с уникальным идентификатором фильма). Новая таблица: (фильм_идентити, фильм, актер)

4) Дальше мы узнаем, что у нас два актера Пети Иванова. Что делать? Создаем дополнительный столбец (актер_идентити)
Опять же новая реляционная таблица: (фильм_идентити, фильм, актер_идентити, актер)

5) когда все ясно с таблицей, можно переходить к рассмотрению предложения SharuPoNemnogu о нормализации (иначе говоря, мы должны решить как же нам хранить наши данные)

6) когда мы окончательно определились со структурой хранения данных, можно начинать писать запросы