Drupal поиск пользователя по профилю имени и фамилии запроса - PullRequest
0 голосов
/ 02 июля 2010

Я пишу модуль, который позволяет быстро добавлять пользователей только путем указания имени и фамилии (без адреса или имени пользователя). Эти пользователи похожи на «призрак», только для временного использования. Перед добавлением пользовательского модуля необходимо проверить, существует ли в системе пользователь с таким же именем и фамилией, чтобы избежать создания нескольких пользователей-призраков с одинаковыми именами. Другими словами - мне нужен SQL-запрос для фильтрации пользователей по фамилии и имени. Так как до сих пор мне удавалось произвести такой запрос:

$sql = "SELECT DISTINCT u.uid AS uid FROM users u INNER JOIN profile_values pv ON u.uid = pv.uid INNER JOIN profile_fields pf ON pv.fid = pf.fid "
                ."WHERE pf.fid = 2 AND pv.value = '%s'";
            $uid = db_fetch_object(db_query("$sql", $ln))->uid;

Этот запрос недостаточно хорош, поскольку он находит пользователя только по соответствующей фамилии. Я не эксперт SQL, но я не знаю, как объединить таблицы, чтобы сузить результаты, чтобы имена и фамилии были сопоставлены: Как то так

WHERE pf.fid = 2 AND pv.value = 'LASTNAME' AND pf.fid = 1 AND pv.value = 'FIRSTNAME';

В моей таблице profile_fields у меня есть: fid = 2 -> фамилия fid = 1 -> имя

И последнее предложение WHERE не будет работать. Я надеюсь, что те, кто знаком с отношениями с таблицами профилей пользователей в системе Drupal, знают, о чем я прошу.

1 Ответ

2 голосов
/ 02 июля 2010

вам нужно присоединиться дважды с разными псевдонимами. Что-то вроде:

$sql = "SELECT DISTINCT u.uid AS uid FROM {users} u 
INNER JOIN {profile_values} pv ON u.uid = pv.uid 
INNER JOIN {profile_fields} pf ON pv.fid = pf.fid
INNER JOIN {profile_values} pv2 ON u.uid = pv2.uid 
INNER JOIN {profile_fields} pf2 ON pv2.fid = pf2.fid
WHERE pf.fid = 2 
AND pv.value = '%s'
AND pf2.fid = 1 
AND pv2.value = '%s'";

 $uid = db_fetch_object(db_query("$sql", array($ln, $fn)))->uid;

Также с drupal вы должны ставить {} вокруг имен таблиц.

...