Мы работаем в течение нескольких часов по серьезной проблеме.
У нас есть следующий код:
mysql_connect("localhost","xxx","xxx") or die(mysql_error());
mysql_select_db("xxxe");
$q = "SELECT m.id, m.expired_date, u.email
FROM jos_osemsc_member m, jos_osemsc_orders o, jos_users u
WHERE o.order_id = $orderID
AND m.member_id = o.user_id
AND u.id = o.user_id";
$res = mysql_query($q);
if (!$res) {
mail('[email protected]','test',mysql_error());
}
mail("[email protected]", "count", mysql_num_rows($res));
Мы получаем почту "count", но с "0" для результата mysql_num_rows. Если мы отправим запрос ($ q) по электронной почте и выполним его в phpMyAdmin, он будет работать, и мы получим одну строку...
Любые идеи?
Спасибо за помощь, которая будет ОЧЕНЬ apperciated
Возможно, пользователь xxx
имеет более ограничительные разрешения, чем пользователь, который вы используете для PMA.
$res
где-нибудь? Если вы не настроили error_reporting
на E_ALL
, сделайте это сейчас: error_reporting(E_ALL);
, Вы получаете какие-либо ошибки?
Попробуйте переформулировать запрос. Я считаю, что LEFT JOINs намного легче понять и справиться.
SELECT m.id, m.expired_date, u.email
FROM jos_osemsc_orders AS o
LEFT JOIN jos_osemsc_member AS m ON (m.member_id = o.user_id)
LEFT JOIN jos_users AS u ON (u.id = o.user_id)
WHERE o.order_id = $orderID;
Если это не сработает, уменьшите запрос до таблицы заказов и убедитесь, что вы получили результат. Если это работает, добавьте таблицу и т.д.
Кроме того, я вижу, где будет проблема, если заказ был помещен кем-то, кто был пользователем, но не членом, или наоборот. Тем не менее, этот вопрос будет решаться с помощью запроса на объединение влево. Кроме того, я изменил порядок таблиц в запросе, чтобы иметь больше смысла.