Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте! ОбЪединяю две таблицы с помощью LEFT JOIN, в одной таблице зарегистрированные пользователи, имеют айди 1, 2, 3, 4... и т.д, в другой храняться данные от зарегистрированных и незарегистрированных пользователей, айди 1, 2, 3, 7ho66ip5dm, 4 , и т.д. При объединении таблиц вывожу логин по айди, и все бы нормально, только 7ho66ip5dm не зарегистрированный пользователь, и, из-за первой цифры 7 выводится логин под айди 7. Весь день бьюсь, что тут не так?
("SELECT t1.*, t2.login as login, DATE_FORMAT(t1.time_pay, '%d.%m.%y, %H:%i') as f_time_pay FROM `".PREFIX."_history_pay` AS t1 LEFT JOIN `".PREFIX."_users` AS t2 ON t1.user_id = t2.id LIMIT ".$start_pos.", ".$perpage."");
Неактивен
не понял; покажите пример тестовых данных и какой должен быть результат
Неактивен
Создайте таблички и наполните тестовыми данными на sqlfiddle и приведите пример того результата, который Вы хотите получить.
Неактивен
Если во второй таблице покупка неавторизованным пользователем помечается jhfhjdfhjfd, 5fghkvbhk, 2, 7, то при объединении, неавторизованные пользователи, совершившие покупку, где user_id jhfhjdfhjfd, выводится пустая ячейка, но, если незарегистрированный пользователь с user_id 5fghkvbhk, то перваяя цифра выводится под логином пользователя с id=5, как в left join соединить эти таблицы, и при проверке, незарегистрированные пользователи выводили пустую ячейку, несмотря, на то, что их айди начинается на цифру с последующими символами.
Неактивен
все равно не понятно.
Неактивен
vasya написал:
все равно не понятно.
Вот смотри, есть в таблице колонка user_id, куда вносятся данные о покупках - если человек авторизован, - то вносится в user_id его id(1,2,3), если человек не авторизован, то его покупки вносятся в user_id как jghdgfjgdh, 2gjhjgfgfhj,9mkvbmnm.
Тут я выдергиваю логин, дату, айди покупки, статус
("SELECT t1.*, t2.login as login, DATE_FORMAT(t1.time_add, '%d.%m.%y, %H:%i') as f_time_add FROM `".PREFIX."_history_out` AS t1 LEFT JOIN `".PREFIX."_users` AS t2 ON t1.user_id = t2.id LIMIT ".$start_pos.", ".$perpage."");
Но, если в user_id начинается 2gjhjgfgfhj, 9mkvbmnm, то они идут как пользователи под айди 2, 9, хотя они не зарегистрированы, просто при объединении таблицы юзер айди и айди, 1 цифра (хэша) или чего там, считается как зарегистрированный пользователь с присвоенным к нему этим айди.
Неактивен
если я правильно вас понял, то
Неактивен
vasya написал:
если я правильно вас понял, то
MariaDB [(none)]> select * from (select 2 as id) t left join (select '2gjhjgfgfhj' as id2) t2 on cast(id as char)=id2;
+----+------+
| id | id2 |
+----+------+
| 2 | NULL |
+----+------+
1 row in set (0.09 sec)
MariaDB [(none)]> select * from (select 2 as id) t left join (select '2gjhjgfgfhj' as id2) t2 on id=id2;
+----+-------------+
| id | id2 |
+----+-------------+
| 2 | 2gjhjgfgfhj |
+----+-------------+
1 row in set, 1 warning (0.00 sec)
Возможно, но я ничего не понял) Как в этом запросе не сравнивать зарегистрированного пользователя (4kjghjkhf) с зарегистрированным пользователем под id=4, а выводить пустую строку?
("SELECT t1.*, t2.login as login, DATE_FORMAT(t1.time_add, '%d.%m.%y, %H:%i') as f_time_add FROM `".PREFIX."_history_out` AS t1 LEFT JOIN `".PREFIX."_users` AS t2 ON t1.user_id = t2.id LIMIT ".$start_pos.", ".$perpage."");
Неактивен
cast(t1.user_id as char) = t2.id
Неактивен
vasya написал:
cast(t1.user_id as char) = t2.id
Нее, 2fdjhfdjhfdh определяется как id=2
Неактивен
Dagon2016 написал:
Нее, 2fdjhfdjhfdh определяется как id=2
тогда без тестового примера мы так и не перейдем к конкретике
Неактивен
Vasya. Через LEFT JOIN соединяю эти таблицы:
Подскажи пожалуйста, почему вот этот незарегистрированный user_id(7ho66ip5dmibm4b1uvjsvntvr0) сравнивается с зарегистрированным id7, и выводится под логином QWERTY, хотя это разные люди. Запрос такой:
("SELECT t1.*, t2.login as login, DATE_FORMAT(t1.time_add, '%d.%m.%y, %H:%i') as f_time_add FROM `".PREFIX."_history_out` AS t1 LEFT JOIN `".PREFIX."_users` AS t2 ON t1.user_id = t2.id LIMIT ".$start_pos.", ".$perpage."");
Наставь меня пожалуйста на путь истинный, два дня читаю про эти JOIN, немогу понять.
Отредактированно Dagon2016 (03.10.2016 23:34:57)
Неактивен
потому что сервер преобразует 7ho66ip5dmibm4b1uvjsvntvr0 в число и получается 7, чтобы этого не происходило нужно явно указать ему проводить сравнение как со строкой:
.. ON cast(t1.user_id as char) = cast(t2.id as char) LIMIT ..
Неактивен
vasya написал:
потому что сервер преобразует 7ho66ip5dmibm4b1uvjsvntvr0 в число и получается 7, чтобы этого не происходило нужно явно указать ему проводить сравнение как со строкой:
.. ON cast(t1.user_id as char) = cast(t2.id as char) LIMIT ..
Спасибо Вам огромное!!! Вы очень хороший человек!!! Теперь вывод результата как задумано.
Неактивен