powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Случайные значения
17 сообщений из 17, страница 1 из 1
Случайные значения
    #38452159
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каким образом можно выбрать из таблицы jobs 16 случайных значений j_id и вставить их в таблицу studs в поле s_job?
...
Рейтинг: 0 / 0
Случайные значения
    #38452201
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsteКаким образом можно выбрать из таблицы jobs 16 случайных значений... ORDER BY RAND() LIMIT 16
gsteвставить их в таблицуINSERT ... SELECT ...
...
Рейтинг: 0 / 0
Случайные значения
    #38452272
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
gste в поле s_job
Мне нужно вставить в существующие 16 записей в поле s_job 16 случайных записей поля j_id
...
Рейтинг: 0 / 0
Случайные значения
    #38452526
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо вставить новые записи, либо обновить существующие записи.

Определитесь с задачей, что ли...
...
Рейтинг: 0 / 0
Случайные значения
    #38452533
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
каким образом можно обновить существующие 16 записей таблицы s_*, чтобы в поле s_job вставить 16 случайных значений из поля j_id таблицы j_*? Точнее, нужно отсортировать j_id по RAND(), выбрать 16 первых (LIMIT 16) и вставить В СУЩЕСТВУЮЩИЕ ЗАПИСИ (UPDATE) в поле s_job.
...
Рейтинг: 0 / 0
Случайные значения
    #38452578
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё равно часть сведений - мимо.

Итак, есть некая таблица j_*, в ней есть поле j_id и некоторое количество записей, из которых следует взять случайные 16. Сразу вопрос - в этой таблице гарантированно имеется 16 записей? или может статься, что их меньше? И второй - значения в поле j_id уникальны? а если нет - нужны просто 16 случайных, или 16 случайных уникальных?

Далее - есть некая таблица s_*, в ней есть поле s_job. Именно в ней надо обновить записи, вставив в них добытые случайные значения. Тут тоже несколько вопросов, но главный - а сколько в этой таблице записей? Ровно 16? не более 16? или может быть и больше? А если количество выбранных из первой таблицы записей не равно количеству во второй - как выбирать, какие обновлять, а какие нет? и как выбирать, каким значением обновлять каждую конкретную запись? Впрочем, если равно, вопрос практически тот же - как устанавливать соответствие?

Как видишь, вопросов ещё очень дохрена... определяйся с задачей. До конца. По всем нюансам и возможным вариантам.
...
Рейтинг: 0 / 0
Случайные значения
    #38452658
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Akinaв этой таблице гарантированно имеется 16 записей?
Я написал 16, значит 16. Меньше не будет.
Akinaзначения в поле j_id уникальны?
Я не написал, значит не имеет значения. Даже если будет половина одинаковы j_id, все равно нужно ИЗ НИХ выбрать 16 случайных и записать в существующие поля s_job. В данном случае они всегда будут уникальны. Могут быть разрывы, но они тоже не имеют значения исходя из постановки задачи (выбирать j_id нужно только из существующих).

Akinaа сколько в этой таблице записей?
Опять же, я сказал 16. По меньшей мере в j_* 21 запись, которые нужно распределить по 16 существующим записям s_*. По большей мере, j_* всегда больше s_*.
AkinaА если количество выбранных из первой таблицы записей не равно количеству во второй -
Ограничение в 16 идет от количества записей во второй таблице. Задача - обновить 16 существующих записей, не нужно добавлять новые или обновлять лишь 15.5 записей, нужно обновить столько, сколько есть. Я конкретизировал, попросив помочь с запросом именно для 16.
Akinaи как выбирать, каким значением обновлять каждую конкретную запись?
Я написал, что нужно обновить случайными значениями второй таблицы конкретного поля j_id.
Смысл в том, что j_* это задания, которых всегда больше, чем студентов в s_*. Нужно распределить в случайном порядке существующие задания среди существующих студентов. Каждому студенту из s_id соответствует одно задание j_id.
Прощу прощения за неточность исходной формулировки.
...
Рейтинг: 0 / 0
Случайные значения
    #38452782
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gste , Ваше раздражение есть свидетельство предположения, что я занимаюсь праздным вопрошательством?

Поверьте, мне абсолютно пофиг, решите Вы свою (обратите внимание - не мою!) проблему. И, опять же поверьте, я всегда найду чем ещё заняться. Да и постов на форуме у меня достаточно. Так что это не попытка накрутить счётчик ничего не значащим трындежом.
...
Рейтинг: 0 / 0
Случайные значения
    #38453246
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
я прошу меня извинить за свои манеры, но я действительно не понимаю, зачем нужна такая детализация в тех вещах, которые вытекают из моего исходного вопроса
...
Рейтинг: 0 / 0
Случайные значения
    #38453258
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да потому что это РАЗНЫЕ задачи, и у них РАЗНЫЕ решения. Порой совершенно непохожие.
...
Рейтинг: 0 / 0
Случайные значения
    #38453275
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
разве я так сильно уточнил задачу, ответив на ваши вопросы?
...
Рейтинг: 0 / 0
Случайные значения
    #38453661
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте не будем ругаться :). Еще раз извиняюсь. Все же хотел бы решить проблему.
В моем представлении нужно взять из j_* (jobs) 16 случайных записей чем-то вроде < SELECT j_id FROM jobs ORDER BY RAND() LIMIT 16 > и вставить получившиеся значения в s_* (studs) с помощью UPDATE studs, <...> SET s_job=<...>.j_id WHERE s_id=t1.rnum , где rnum - нумерация получившихся от <...> записей. Однако не получается создать такую <...>, чтобы в одном столбце rnum было по порядку от 1 до 16, а в другом случайные j_id из jobs.
Вот моя попытка написать запрос с нумерацией, но получается декартово произведение
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
	jobs.j_id, 
	t2.rnum 
FROM 
	jobs, 
	(	SELECT @i := @i + 1 AS rnum 
		FROM 
			jobs, 
			(SELECT @i:=0) AS z 
		ORDER BY RAND() 
		LIMIT 16
	) t2;



Результат (частично)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
j_id	rnum
1	17
1	18
1	11
1	2
1	7
1	19
1	15
1	14
1	16
1	3
1	10
1	5
1	21
1	1
1	13
1	12
2	17
2	18
2	11
2	2
2	7
2	19



Собственно, если я правильно понимаю, нужно сформировать правильную нумерацию для этой временной таблицы t2.
...
Рейтинг: 0 / 0
Случайные значения
    #38453683
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, к обсуждению никто не подключается, а я товарищ занудный...

Пока для меня полностью ясна постановка первой части задачи. В таблице jobs имеется не менее 16 записей, и даже при наличии дублирующихся значений в поле j_id их следует считать различающимися (или допускаю, что на этом поле есть условие уникальности, и дубликатов там не встречается, что сути не меняет).

А вот что делать со второй частью задания - мне совершенно непонятно. Выбрать - это элементарно, вставить - тоже, а вот обновить - это уже нетривиально... а определённости нет.
...
Рейтинг: 0 / 0
Случайные значения
    #38453686
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт же нумерации - перечитайте FAQ: Нумерация строк и другие вопросы про использование переменных . В приведённом нумерующем запросе явно наверчено лишнего.
...
Рейтинг: 0 / 0
Случайные значения
    #38453726
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
большое спасибо за ссылку. Переосмыслил свой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
	@i := @i + 1 AS rnum, 
	t1.j_id
FROM (
	SELECT j_id 
	FROM jobs 
	ORDER BY RAND() 
	LIMIT 16
	) AS t1, 
	(SELECT @i:=0) AS z



И, собственно, решение моей задачи:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
UPDATE studs, (
	SELECT 	@i := @i + 1 AS rnum, 
			t1.j_id
	FROM (
		SELECT j_id 
		FROM jobs 
		ORDER BY RAND() 
		LIMIT 16) AS t1, 
		(SELECT @i:=0) AS z
		) t2
SET s_job=j_id
WHERE s_id=rnum;
...
Рейтинг: 0 / 0
Случайные значения
    #38453767
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о как... они оба уникальны, оказывается...
...
Рейтинг: 0 / 0
Случайные значения
    #38453862
gste
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
для не уникальных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
UPDATE studs, (
	SELECT tab1.s_id, tab2.j_id
	FROM
		(SELECT 	
			@j := @j + 1 AS r1num, 
			t1.s_id
		FROM (
			SELECT s_id 
			FROM studs
			ORDER BY s_id ASC) AS t1, 
			(SELECT @j:=0) AS z) tab1,
		(SELECT 	
			@i := @i + 1 AS r2num, 
			t2.j_id
		FROM (
			SELECT j_id 
			FROM jobs 
			ORDER BY RAND()) AS t2, 
			(SELECT @i:=0) AS z) tab2	
	WHERE tab1.r1num=tab2.r2num) t3
SET s_job=j_id
WHERE studs.s_id=t3.s_id;
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Случайные значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]