Есть 3 таблицы в бд 1)Category Содержит в себе поля id и name 2)User Содержит в себе поля id,login и password 3)user_category Содержит в себе поля user_id и category_id Нужен запрос который будет через get передавать id пользователя и включать его во все имеющиеся категории.
@P4rzival, собственно запрос на вставку может выглядеть так: Код (Text): insert into user_category (user_id, category_id) select 1, cat.id from Category cat where exists (select id from User where id = 1) , где константа 1 - переданный из формы id пользователя. Но методом GET не стоит передавать информацию, необходимую для изменения данных в базе. Для этого есть POST
@Sail ,если можно еще один вопрос,тогда каким образом будет выглядит запрос если нам надо вывести на каждого человека кол-во категорий в которых он состоит? И спасибо большое за предыдущий ответ,вы очень помогли
@Sail Код (Text): SELECT user_categories.user_id, COUNT (user_categories.category_id) FROM user_categories left join user user_id = category_id что-то такое получилось,но не работает (9
Во-первых, ключевое слово ON пропущено. Во-вторых, условие связки таблиц user_category и User - по id пользователя, а не id пользователя с одной стороны и id категории - с другой. В-третьих, внимательнее с названиями таблиц. В первом сообщении они другие. В-четвертых, ещё нужна группировка. Спойлер На основе этого примера: Код (Text): SELECT cityname, COUNT(users.id) FROM cities LEFT JOIN users ON cities.id = users.city_id AND users.age < 30 GROUP BY cities.cityname ORDER BY cities.cityname; , из которого убрать проверку на возраст...
@Sail извините,что до меня вся так туго доходит,но как я понял,вроде я все исправил. Код (Text): SELECT user_categories.user_id, COUNT (user_categories.category_id) FROM user_categories LEFT JOIN user ON user_categories.user_id = user.id GROUP BY user.id ORDER BY user.id;
@P4rzival, что в итоге-то? Какое сообщение выводится при попытке выполнить запрос? Опять обращу внимание на название таблиц: user_category и User.
@Sail SELECT user_categories.user_id, COUNT (user_categories.category_id) FROM user_categories LEFT JOIN user ON user_categories.user_id = user.id GROUP BY user.id ORDER BY user.id LIMIT 0, 1000
@P4rzival, ещё замечание: если уж используете left join, то надо основной делать таблицу User. Иначе смысл теряется. Или right join, и при выводе использовать не user_id из таблицы-связки, а id из таблицы пользователей. Спойлер Код (Text): select id, login, count(category_id) from User left join user_category on user_id = id group by id; select id, login, count(category_id) from user_category right join User on id = user_id group by user_id;
Вообще то от задач зависит что на что джойнить. В этом случае он правильно делает т.к. при твоём варианте будут и те юзеры у которых нет ни одной категории. А при его варике будут выбираться только те у кого есть. А вообще от первоначальной задачи товарищ далеко ушёл ( Загугли distinct и посмотри как инсерт делается со вложенной выборкой и ни какого джоина не нужно --- Добавлено --- А да, он не решив одну, еще придумывает. Тогда да, верно. Категории на юзеров джойтить, группировка по юзерам и каунт по категори айди