1

Тема: Потрібно вибрати користувачів

Є три таблиці users check_email ref Потрібно скільки рефералів (в таблиці `ref`), що зареєструвались в проміжку від 01.04.2017 до 30.06.2017 і підтвердили свій email(в таблиці check_email)  є у кожного користувача з таблиці `users`
таблиця users поля(`id`,`reg_date`-дата коли зареєструвався користувач)
check_email (`id_user`,`status`(якщо 1 то все ок))
`ref`(`sponsor_id`-той хто запросив,`refer_id`-реферал)

Подякували: Monolith1

2

Re: Потрібно вибрати користувачів

Якось так:

SELECT 
    COUNT(u.id) as count_items
FROM 
    `users` as u 
    LEFT JOIN check_email as rel ON rel.id_user = u.id 
    LEFT JOIN ref as r ON rel.sponsor_id = b.id 
WHERE 
    (u.id = 12) AND (u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017) AND (rel.status = 1)

Якось так. Формат дати самі підберете.

3

Re: Потрібно вибрати користувачів

Sensetivity написав:

Якось так:

SELECT 
    COUNT(u.id) as count_items
FROM 
    `users` as u 
    LEFT JOIN check_email as rel ON rel.id_user = u.id 
    LEFT JOIN ref as r ON rel.sponsor_id = b.id 
WHERE 
    (u.id = 12) AND (u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017) AND (rel.status = 1)

(u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017)
Можна замінити на коротший/простійший
(u.reg_date BETWEEN 01.04.2017 AND 30.06.2017)

4 Востаннє редагувалося olekca01 (10.04.2017 19:56:41)

Re: Потрібно вибрати користувачів

VTrim написав:
Sensetivity написав:

Якось так:

SELECT 
    COUNT(u.id) as count_items
FROM 
    `users` as u 
    LEFT JOIN check_email as rel ON rel.id_user = u.id 
    LEFT JOIN ref as r ON rel.sponsor_id = b.id 
WHERE 
    (u.id = 12) AND (u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017) AND (rel.status = 1)

(u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017)
Можна замінити на коротший/простійший
(u.reg_date BETWEEN 01.04.2017 AND 30.06.2017)

$query = "SELECT COUNT(u.id) as count_items FROM `users` as u LEFT JOIN check_email as rel ON rel.id_user = u.id LEFT JOIN ref as r ON rel.sponsor_id = b.id WHERE (u.id = 12) AND (u.reg_date <= 01.04.2017 AND  u.reg_date <= 01.04.2017) AND (rel.status = 1)";
    $res = mysql_query($query);
    $row = mysql_fetch_array($res);

Пише

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/user44242/data/www/rocketsoc.ga/blocks/contest.php on line 14

   
14 стрічка:$row = mysql_fetch_array($res);

5 Востаннє редагувалося Sensetivity (10.04.2017 23:24:50)

Re: Потрібно вибрати користувачів

Вам MySQL повертає помилку.

$res = mysql_query($query);

Спробуйте такий запис, щоб дізнатися в чому проблема.

if (!$res = mysql_query($query)) {
echo mysql_errno() . ": " . mysql_error() . "\n";
}

6

Re: Потрібно вибрати користувачів

Sensetivity написав:

Вам MySQL повертає помилку.

$res = mysql_query($query);

Спробуйте такий запис, щоб дізнатися в чому проблема.

if (!$res = mysql_query($query)) {
echo mysql_errno() . ": " . mysql_error() . "\n";
}

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.2017 AND u.reg_date <= 01.04.2017) AND (rel.status = 1)' at line 1

7

Re: Потрібно вибрати користувачів

трошки змінив код

$query = "SELECT COUNT(u.id) as count_items FROM `users` as u LEFT JOIN check_email as rel ON rel.user_id = u.id LEFT JOIN ref as r ON rel.sponsor_id = b.id WHERE (u.id = 12) AND (u.reg_date BETWEEN '2017-04-01 00:00:00' AND '2017-06-30 23:59:59') AND (rel.status = 1)";
    if (!$res = mysql_query($query)) {
        echo mysql_errno() . ": " . mysql_error() . "\n";
    }
    $row = mysql_fetch_array($res);
    

і тепер

1054: Unknown column 'rel.sponsor_id' in 'on clause'

8

Re: Потрібно вибрати користувачів

Ось силки на таблиці
http://prntscr.com/ev73nc ref
http://prntscr.com/ev74c6 check_email
http://prntscr.com/ev754s users

9 Востаннє редагувалося Sensetivity (12.04.2017 15:00:09)

Re: Потрібно вибрати користувачів

olekca01 написав:

трошки змінив код

$query = "SELECT COUNT(u.id) as count_items FROM `users` as u LEFT JOIN check_email as rel ON rel.user_id = u.id LEFT JOIN ref as r ON rel.sponsor_id = b.id WHERE (u.id = 12) AND (u.reg_date BETWEEN '2017-04-01 00:00:00' AND '2017-06-30 23:59:59') AND (rel.status = 1)";
    if (!$res = mysql_query($query)) {
        echo mysql_errno() . ": " . mysql_error() . "\n";
    }
    $row = mysql_fetch_array($res);
    

і тепер

1054: Unknown column 'rel.sponsor_id' in 'on clause'

Очевидно, я зробив одруківку.
Замініть:

LEFT JOIN ref as r ON rel.sponsor_id = b.id 

на

LEFT JOIN ref as r ON r.sponsor_id = b.id 
Подякували: olekca011

10

Re: Потрібно вибрати користувачів

Sensetivity написав:

Очевидно, я зробив одруківку.
Замініть:

LEFT JOIN ref as r ON rel.sponsor_id = b.id 

на

LEFT JOIN ref as r ON r.sponsor_id = b.id 
SELECT COUNT(u.id) as count_items FROM `users` as u LEFT JOIN check_email as rel ON rel.user_id = u.id LEFT JOIN ref as r ON r.sponsor_id = r.id WHERE (u.id = 12) AND (u.reg_date BETWEEN '2017-04-01 00:00:00' AND '2017-06-30 23:59:59') AND (rel.status = 1)

Воно би мало вибрати id кожного юзера і кількість тих рефералів які підпадають тим критеріям. Якщо в когось нема то має вернути його id і 0

11 Востаннє редагувалося Sensetivity (13.04.2017 15:18:21)

Re: Потрібно вибрати користувачів

del