Есть база профилей в которой есть refid оно содержит id партнера. id партнеров может повторяться сколько угодно раз у разных профилей то есть допустим вот так идет столбик с userid 1 1 1 2 2 3 5 7 8 5 5 5 6 4 4 4 4 4 Так вот в чем задача Нужно выбрать только те профили у которых менее 2х партнеров в системе то есть их id в поле refid повторяется меньше 2 раз. Подскажите как сделать это если не достаточно информации спрашуйте.
id|login|regdate|refid 1|user1|4134966|0 2|user2|4135100|1 3|user3|4139000|1 4|user4|4145686|3 5|user5|4147806|3 6|user1|4149800|5 В Общем вот таблица с этой таблицы мне нужно взять тот ID у которого самая маленькая regdate и его ID либо меньше 2 раз повторяется в refid либо его ID вообще нету в refid Так понятней? Добавлено спустя 4 минуты 1 секунду: Слишком сложно для меня помогите запрос сделать
ты думаешь кому-то не пофиг что там для тебя слишком сложно? учись или плати. так понятней? форум для тех, кто сам себе помогает. покажи чего ты добился: SQL запрос который ты написал, который почти правильный, но чего-то не хватило… тогда люди к тебе потянутся.
Код (Text): "SELECT id, COUNT(refid) FROM user_$pre GROUP BY refid HAVING COUNT(refid) < 2 ;" Ну вот SQL который вытаскивает те ID которых в refid меньше 2 ,Что сюда нужно дописать что бы он еще вытаскивал те ID которых в refid нету?Извините..
точка с запятой внутри строки запроса не нужна! когда делаешь GROUP BY, в строке SELECT нельзя использовать поля, которых нет в строке GROUP BY. но можно использовать функции от других полей. например вот так правильно, по чему группируем, то и выводим, плюс функция: Код (Text): SELECT refid, COUNT(*) FROM user_xxx GROUP BY refid HAVING COUNT(*) < 2 означает "сгруппировать по refid, вывести эти refid и число строк с одинаковым refid. при условии, что это число меньше двух". а то, что у тебя написано это галиматья, которая случайно может выдать правдоподобные значения. Добавлено спустя 4 минуты 1 секунду: поймать случай когда refid вообще не упоминается как-то сложно. потому что таких refid бесконечно много ))) ну почти бесконечно. то есть нужен список какие refid вообще возможны, тогда можно будет сочинить запрос про то, какие не встречаются в другом списке. так понятно? Добавлено спустя 15 минут 6 секунд: только мне кажется, что ты периодически путаешь id и refid? ID вообще не повторяется, он уникален в этой таблице, ёмана! попробую исправить: подтверди или уточни что имел в виду
ну да у меня перед данным запросам есть функция которая возвращает все возможные ID Вопрос в том как правильно создать запрос.Щас еще раз попробую объяснить. Мне нужно из таблицы с профилями взять информацию а точней взять ID профиля который был зарегистрирован раньше всего и он имеет менее 2х партнеров .то есть в поле refid меньше 2х раз указан ID этого профиля или же его вообще нету (в поле refid содержится ID пользователя по чей ссылки зарегистрировался профиль) Теперь на примере напишу таблицу и скажу какой должен выбраться id id|login |regdate|refid 1|Admin|400111 |1 - Профиль Администратора записан сам под себя сам под себя 2|user1 |400222 |1 - Этот профиль зарегистрирован по ссылки Администратора 3|user2 |400333 |1 - По ссылки Администратора 4|user3 |400444| 2 -Зарегистрирован по ссылки user1 и в поле refid содержит ID user1 5|user4 |400555| 3 -Зарегистрирован по ссылки user2 и в поле refid содержит ID user2 6|user5 |400666|4 -Зарегистрирован по ссылки user3 и в поле refid содержит ID user3 В той таблицы должно вернуть ID 2 USER1 . хоть у него и есть одна запись в refid его id но он зарегистрировался раньше остальных и до сих пор не имеет 2 записей ref id. ID 1 Admin уже имеет 3 записи refid и он не входит в этот список. Я думаю уже более понятно? Давай те продолжим разбираться как создать запрос.Допусти в переменной $ActivID Содержится массив тех ID Которые должны быть в refid. Или можно это тоже узнать из SQL запроса. так же в таблице есть поле tarifs и есть она не пустой то ID Профиля должно проходить проверку в refid .. Я наверно сильно вас озадачил..(
Вроде складывается картинка. Давай так: ты создашь заготовку с данными на http://sqlfiddle.com/ , а я там добавлю рабочий запрос. Будет всё по-взрослому. Ты точно полюбишь sqlfiddle !
Ты его в базу как-то пихал? Вот впихни в сервис sqlfiddle Тогда все смогут на него посмотреть и легко подправить и добавить запросы для примера.
прощаю. теперь сделай sqlfiddle со своими данными. и дай ссылку. объясняю один раз. там два поля ввода. левое для "схемы" - его заполняшь ты. правое для тестовых запросов - это для того чтобы мы дали тебе ответы. слева должны быть запросы вида CREATE TABLE и INSERT . запросы разделяются точкой с запятой. когда вобъешь/скопируешь туда всё, жмешь кнопку Build Schema. при успехе у тебя правая половина тоже становится доступна, а адрес странички становится новым и уникальным, чтобы ты на него дал ссылку.
Держи: http://sqlfiddle.com/#!2/87865/4 Код (Text): SELECT u.`id`, u.`log`, u.`regdate`, r.`cnt` FROM `user` AS u LEFT JOIN ( SELECT `refid`, COUNT(*) AS `cnt` FROM `user` GROUP BY `refid` ) AS r ON u.`id`=r.`refid` WHERE (r.`cnt` IS NULL) OR (r.`cnt` < 2) ORDER BY u.`regdate` ASC Выводит список "слабых партнеров" ))) Я выше говорил, что для вычисления отсутствующих ID нужен список какие ID вообще есть. Выяснилось, что сама таблица `user`годится для этого. Я соединяю её с подзапросом с ней же самой, но уже сгруппированной по рефералу. LEFT JOIN в отличие от INNER JOIN клеит таблицы так, что возможны пустые поля там, где соответствие не найдено. Нам нужны те записи, у которых нет последователей (cnt IS NULL) или число последователей меньше двух. Список отсортирован по возрастанию даты, т.е. сверху самые старые из ленивых. Про "мне нужно взять тот ID у которого самая маленькая regdate" я не очень понял смысл. Но если тебе реально нужна только одна запись, то добавим "… LIMIT 1": http://sqlfiddle.com/#!2/87865/5
А что в поле 'CNT' Пишется? Добавлено спустя 7 минут 48 секунд: Вроде запрос работает отлично, Время покажет, честно я восхищен...Я думал для этого потребуется вмешательство PHP и несколько раз запрашивать данные с базы, сейчас я же вижу что все можно решить одним запросом, и честно у меня появился весомый энтузиазм более углубленно выучить SQL !Спасибо Вам за помощь!
Давай, удачи в изучении! Добавлено спустя 1 минуту 56 секунд: это алиас для количества записей при группировке