Подскажите пожалуйста. У меня есть две таблицы в mysql, допустим table1 и table2. table1 содержит столбцы: id | name | email table2 содержит столбцы: id | name | status Важный момент, все значения в столбце name, одинаковые в обеих таблицах... Мне нужно, сделать выборку значений name из первой таблицы, где значение status будет равно "2"...Полученные значения записать в массив... Далее мне нужно из второй таблицы, вывести значения email, только для тех записей name, которые перечислены в массиве полученном из первой таблицы. Хочу это реализовать так: Через PDO из первой таблицы получить массив со значениями. Далее через второй запрос PDO сделать выборку нужных email при помощи полученного ранее массива и оператора IN()... Правильный подход? Или можно как то подругому? Например сделать всё в одном запросе PDO и на выходе сразу получить массив с нужными email...
Не совсем. name в одной из колонок лишняя. Если id есть. Выложите структуру обеих таблиц сюда, желательно с данными. Вам подскажут как их объединить в одном запросе.
PHP: SELECT `t1`.* FROM `table1` as `t1` INNER JOIN `table2` as `t2` WHERE `t1`.`status` = '2' AND `t1`.`id` = `t2`.`id` Получишь те строки из первой таблицы, у которых во второй такой же id и status = 2 Вроде так должно работать, лень проверять. Но смысл такой. Поправьте, если не прав Ну а объект, полученный в результате запроса уже в PHP: $query->fetch_all (MYSQLI_RESULT); И согласен со сказанным выше, данные пользователя достаточно хранить в одной таблице, для взаимодействия между таблицами и собственно идентификации пользователя достаточно поля id. Только нужно ли тебе создавать две таблицы, в которых будет создаваться одинаковое количество строк для каждого пользователя. Почему нельзя статус поместить в первую?
Спасибо за советы... У меня проект устроен так, что в нем 2 таблицы: Первая таблица, нужна для авторизации и регистрации, в общем содержит в себе логин,пароль и email. Выглядит так: id | name | password | email Вторая таблица, нужна для содержания в себе информации, которую пользователи ежегодно и ежемесячно вносят в проект...Выглядит примерно так: id | name | meaning1 | meaning2 | meaning3 | meaning4 | meaning5 | year | mounth | status Колонки год/месяц и статус нужны для того, что бы вывести информацию занесенную в определенный промежуток времени и посмотреть в каком она статусе...Поле name нужно для того, что бы посмотреть значения именно интересующего нас пользователя... Когда пользователь авторизовался, и внес информацию, в таблицу пишется его name, внесенные значения и соответствующий год с месяцем. Так как записей по каждому пользователю не мало, не хочется добавлять в каждую строчку таблицы email закрепленный за пользователем... Поэтому принял решение email вынести в таблицу, которая содержит список пользователей проекта (первая таблица)... Так что у меня разное количество строк в этих таблицах. В первой немного (количество пользователей). Во второй много (вся внесенная ими информация).
Судя по всему, вы не совсем понимаете для чего в таблице нужен id И теперь, когда вам поспешили дать готовое решение, вы можете и не захотеть в этом разобраться
Учитывая что там разное количество строк, то по id сравнивать нельзя. Нужно поменять поле name во второй таблице на user_id, и сравнивать по нему, тк id должен быть автоинкрементом --- Добавлено --- Судя по всему, это ещё не готовое решение
Готовое решение мне и не нужно было...Я спрашивал как можно ещё сделать... На сколько я понимаю id это уникальный признак объекта. Во второй таблице я по этим признакам (id), могу редактировать именно нужную мне строчку. Допустим пользователь Reken занес во вторую таблицу 150 строчек, у каждой свой id. Если у всех этих строчек будет одинаковый id, такой же как у Reken в таблице №1, выборка по нему в таблице №2 станет не возможна...В моем случае, у этих таблиц общее только поле name... Если разобраться, то правильнее наверное, Во второй таблице у всех записей занесенных пользователем Reken, сделать id такой же как в первой таблице у пользователя Reken...А уникальным сделать другой столбик, допустим "marker", по которому и находить нужную строчку...Такую же процедуру сделать со строками для каждого пользователя...Но в этом случае придется менять уже существующую таблицу, и логику проекта...
и что тут страшного? конечно нужно.. делать нормально все, а не абы-кабы.... и не надо придумывать велосипеды для названия полей, чтоб потом голову ломать что и где id - обычно, (в абсолютном большинстве) уникальный, автоинкрементный идентификатор записи в таблице, если нужны связи с другими таблиыами обычно используют назваине сущности подчеркивание id, например в вашем случае это может быть user_id - который как-бы подсказывает, что тут хранится id пользователя из таблицы users, а еще неплохо было бы использовать внешние ключ для таких полей почему плохая идея использовать для связи name? потому что неожиданно может изменится имя пользователя и всем связям хана... либо огромный костылище по перепривязыванию к новому имени..... а еще имена могут быть неуникальны P.S кстати то что у вас значения meaning1 | meaning2 | meaning3 | meaning4 | meaning5 тоже наталкивает на мысль о непродуманности структуры БД, а вдруг завтра надо будет еще 10 значений передавать - и что? добавлять поля? переписывать логику? а ведь можно по другому.. по правильному
Конкретнее, пожалуйста. Я не очень корректно выразился, id не должен быть автоинкрементом, а так принято, что id уникальный, и он же автоинкремент. Лично я бы сделал именно так --- Добавлено --- Можно хранить всё в одном поле в виде JSON строки
Опять мимо. Это инструмент, возможность. Как вы её использовать будете, вообще никого не волнует. Если оно работает. И работает быстро. Есть какие-то общепринятые наработки, шаблоны, хитрости. Основная таблица одна, вот в ней id автоинкремент и уникален. В связанных таблицах он может быть каким угодно. В зависимости от задачи. Если с головой не дружить.