@igordata PHP: //Запрос в БД на вывод сообщений //Подготавливаю запрос $z_inbox = $pdo->prepare(' //Делаю выборку полей SELECT //считаю строки SQL_CALC_FOUND_ROWS //указываю поля с какими буду работать в таблице messages `tb1`.`message_id`, `for_user_id`, `from_user_id`, `text`, `pm_read`, `date`, //указываю поля с какими буду работать в таблице users `tb2`.`user_id`, `user_login`, `user_photo` //выбираю с какой таблицей буду работать FROM //указываю выбранные таблицы `messages` tb1, `users` tb2 //от куда выбираем поля WHERE //в таблицу message подставляю сессию юзера `tb1`.`for_user_id` = ? AND //в таблице message поле from_user_id сравниваю с таблицей юзер c полем user_id `tb1`.`from_user_id` = `tb2`.`user_id` //делаю группировку по дате ORDER by `date` //ну и выбор лимит сколько сообщений может помещаться на страницу DESC LIMIT '.$limit_page.', '.$gcount.''); $z_inbox->execute([$user_id]);//выполняю запрос $res_inbox = $z_inbox->fetchall();//вывожу массив результат всех строк Что же не так делаю? Можно построить этот же запрос с INER JOIN Или такой подход как делаю я нормальным считается?
@mahmuzar сейчас попробую, я просто уже и не помню, пробовал если честно. И еще раз попробую лишним не будет. Это же запрос который ты показал для прочтения сообщения делал или как?
@mahmuzar я запрос вставил в код где хочу вывести сообщения между 2мя пользователями чтобы при клике на диалог открывался весь список сообщений между этими пользователями. Но получается выводятся все сообщения от всех пользователей а мне надо между 2мя пользователями. Кстати я базу подредактировал изменил названия полей и убрал не нужные поля.
объясни его так, как ты его понимаешь, с причинами и следствиями. Тогда будет понятно что с ним так, а что - не так.
@igordata честно я не знаю как объяснить и объяснять покажи любой свой запрос и объясни мне его как ты понимаешь что и как происходит. СПАСИБО.
Чтобы понять, какой запрос составить, хорошо было бы увидеть структуру твоей базы, вероятно тогда получится составить нужный запрос. Или выложить на sqlfiddle
@mahmuzar выкладываю дамп таблицы в zip архиве. --- Добавлено --- @mahmuzar Посмотри структуру пожалуйста. Выложил не всю а те таблицы с которыми работаю.
у тебя есть два собеседника и в таблице есть сообщеня от первого второму и от второго первому ну и...?!
@mahmuzar @igordata уже убрал многие ко многим, для начала хочу реализовать один ко многим, а со временем многие ко многим. У меня сейчас так: юзер один пишет юзеру2 и запись в таблицу идет примерно так: 1, юзер1, юзер2, текст, дата. а в обратном порядке запись идти не будет, ну ты понял. Если юзер1 пишет юзеру2 то вся запись будет идти по порядку не дублироваться второму юзеру2.
@igordata @mahmuzar я построил вот такой интересный запрос но результат остался тот же вытягиваются все сообщения которые пришли пользователю, а мне надо чтобы вытягивались сообщения между 2мя пользователями( PHP: $z_inbox = $pdo->prepare(" SELECT u.`user_id`, `user_login`, `user_photo`, m.`message_id`, `from_user_id`, `for_user_id`, `text`, `date`, d.`dialog_id`, `from_dialog`, `for_dialog`, `idate` FROM `users` u INNER JOIN `messages` m ON m.`message_id` = u.`user_id` AND m.`from_user_id` = ? OR m.`message_id` = u.`user_id` AND m.`for_user_id` = ? INNER JOIN `dialogs` d ON d.`dialog_id` = u.`user_id` AND d.`from_dialog` = '".$user_id."' OR d.`dialog_id` = u.`user_id` AND d.`for_dialog` = '".$user_id."'"); $z_inbox->execute([$user_id, $user_id]); $res_inbox = $z_inbox->fetchall();
@igordata я не пойму как пользоваться этим сервисом, вставляю CREAT TABLE и не фига ошибки, хотя бы подсказали где они не просто ругается.
@igordata там выполнять вставку таблиц так, у себя по другому))) Делаю так, уже все вырезал что можно но ошибка есть ошибка в запросе: PHP: CREATE TABLE `messages` ( `message_id` int(11) auto_increment PRIMARY KEY, `from_user_id` int(11), `for_user_id` int(11), `text` text, `date` datetime); Что не так? Давай без приколов, я же скинул зип архив там были таблицы, создана и даже некоторые поля были созданы, вот от туда я беру и вставляю и не фига, синтаксис ему не нравится.
Читаешь ошибку, понимаешь, исправляешь http://sqlfiddle.com/#!9/852f41/1 - я вот так задачу с диалогами решаю, чтоб не было ни from_user_id, ни for_user_id, никаких длинных запросов с OR. Просто делаю связь многие-ко-многим пользователя и диалога. Преимущество ещё в том, что если заказчик попросит диалог между 3-4 пользователями, то ничего в этой структуре базы менять не нужно, хоть между 10-ю. Ну в реальном проекте полей чуть больше, но не суть важно. --- Добавлено --- Твой запрос, кстати, работает на фидле, ты что-то ещё напортачил: http://sqlfiddle.com/#!9/be1b75
@mkramer Я посмотрел запрос, по принципу у меня вроде такой запрос. Только я не понял где у вас многие ко многим в таблице используется. Или вы создали ещё одну таблицу которая соединяет две таблицы и сообщений и диалогов. --- Добавлено --- @mkramer Ошибку читал и она была единой как я запрос не старался сделать выдавало одну и ту же ошибку.
У меня смысл в том, чтобы запрос сообщений был самым элементарным: Код (Text): select * from messages where dialog_id=12 А связь многие-ко-многим между пользователем и диалогами
Связь многие ко многим, такая из-за ещё одной таблици где id и dialod_id находится в ней? А как происходит запись сообщений? юзер1 пишет юзеру2 и запись происходит так: 1 юзер1 юзер2 message Это запись создается только в одну сторону, а во вторую сторону запись создается? 1 юзер2 юзер1 message и еще вопрос: при удалении диалога что у вас происходит, как удаляется диалог и сообщения у этих пользователей?