• Как правильно хранить переписку в БД в данном случае?

    @luna3956
    Таблица такая: Messages(id, user_from_id, user_to_id, text, msg_time, ...).
    Никаких предыдущих номеров Вам запоминать не нужно и никаких записей с одинаковым номером не будет. В таблице Messages поле id делаете автоинкрементным и забываете обо всем, что вас беспокоит.
    Как получать историю:
    select *
    from Messages
    where
        user_from_id = $id_пользователя or
        user_to_id = $id_пользователя
    order by id
    Ответ написан
  • Как сделать sql запрос из одной таблицы с условием из другой?

    @luna3956
    Если правильно понял что Вам нужно, то так:

    select *
    from posts p
    left join (
      select post_id
      from actions a
      where
          a.user_id = 8 and
          a.action_type = 1
    ) a on
        a.post_id = p.id
    where
        p.author_id = 8 or
        a.post_id is not null
    Ответ написан
    5 комментариев
  • Как вернуть данные из функции в виде таблицы?

    @luna3956
    Возможно, вы вызываете функцию так select "public"."GetAllNotes", а надо так select * from "public"."GetAllNotes"
    Ответ написан
    Комментировать
  • Каково отношение работодателей к диплому от Университета Синергия?

    @luna3956
    Отношение работодателей ко всем дипломам одинаковое, а в большинстве случаев отношение одинаковое как к наличию, так и к отсутствию диплома. Будьте компетентны и тогда корочка Вам не понадобится.
    Ответ написан
    Комментировать
  • Почему нельзя использовать алиасы при выборке?

    @luna3956
    Если правильно понял что Вам нужно то как-то так:

    select 
      p.id,
      (CASE WHEN t1.num = 0 THEN 'no' ELSE 'yes' END) as 'match_res' 
    from product p
    inner join (
      SELECT product_id, COUNT(product_detail_id) as num
      FROM products_details 
      WHERE 
        product_detail_type_id IN (1, 4, 123)
      group by product_id
    ) t1 on
      t1.product_id = p.id
    Ответ написан
    3 комментария
  • Как написать SQL запрос?

    @luna3956
    Так у Вас все правильно написано, только кавычки замените на одинарные в sum у monday . Вот валидный пример:
    SELECT 
        SUM(CASE WHEN day='monday' THEN 1 ELSE 0 END) as "понедельники"
    from (select 'monday'::varchar as day) t1
    Ответ написан
    3 комментария
  • Как лучше организовать структуру таблицы users в mysql?

    @luna3956
    С точки зрения проектирования базы данных смысла во второй таблице нет. Просто разделение на две таблицы как правило является следствием использования каких-нибудь фреймворков, где "из коробки" создается таблица с "login. password, status", а для другой информации иногда вместо расширения этой таблицы создают вторую таблицу(например UserProfile) уже с "birthday, sex, ava" и тд. Но, повторюсь, по сути это лишняя сущность, поэтому хранить все в одной таблице более чем корректно.

    Если нет никаких особых условий, из-за которых требуется вторая таблица, то не нужно ее создавать. Ну разве что Ваш внутренний перфекционист захочет разделить информацию требуемую для аутентификации и авторизации от остальной информации. Но, опять же, с точки зрения проектирования БД это разделение одной сущности на две без явной необходимости, потому правильнее хранить все в одной таблице.
    Ответ написан
    Комментировать
  • Почему в результате запроса лишние данные?

    @luna3956
    Потому что приоритет операции AND выше чем у операции OR. У вас идет выборка либо такие записи `post_id`=73 AND `meta_key`='_regular_price' либо такие `meta_key`='_sale_price'.

    Поставьте скобки и все будет как хотите вот так:
    `post_id`=73 AND (`meta_key`='_regular_price' OR `meta_key`='_sale_price')
    Ответ написан
    1 комментарий
  • Как составить SQL запрос поиска данных?

    @luna3956
    select
          c.cname, o.amt
      from Orders o
      inner join Customers c on
          c.cnum = o.cnum
      where
          amt = (select max(amt) from Orders)
    Ответ написан
  • Что значит моделирование обьектов реального мира в ООП?

    @luna3956
    Представьте, что Вам нужно написать программу, в которой ведется учет частных домов на какой-нибудь улице. Ключевой единицей будет дом - объект из реального мира. Чтобы описать его с помощью программного кода для этого отлично подходит ООП. В нем есть такое понятие как класс, он является по сути моделью/структурой объекта из реального мира. В нашем примере с домом это будет примерно такой класс:
    class House {
    
      string address;
      int numOfRooms;
      ...
    
      House(string address, int numOfRooms)
      {
        this.address = address;
        this.numOfRooms = numOfRooms;
      }
    
    }


    Теперь же в самой программе чтобы оперировать таким объектом из реального мира как дом вам достаточно написать примерно следующее:

    House h = new House("Улица Вязов дом 13", 5);

    То есть в переменной h у нас теперь хранится объект/ссылка на объект, являющийся представлением объекта из реального мира - пятикомнатного дома, который находится по адресу "Улица Вязов дом 13".

    Или например собаку(тоже объект из реального мира) можно описать таким классом:

    class Dog {
    
      string name;
      string breed;
    
      Dog(string name, string breed)
      {
        this.name = name;
        this.breed = breed;
      }
    
    }


    И теперь чтобы в программе "создать собаку" с каким-то именем и породой достаточно написать:

    Dog d = new Dog("Бобик", "Бульдог")

    Это очень упрощенные примеры, но думаю вполне подойдут для того, чтобы вы поняли каким образом объекты реального мира моделируются благодаря ООП.

    P.S сам код это не ява а просто псевдокод для наглядности
    Ответ написан
    Комментировать
  • Как правильно использовать whereGreaterThan(), orderBy() и startAt() в запросе (Firebase)?

    @luna3956
    Ошибки:

    1 - сортировка всегда должна предшествовать другим операциям в записи, то есть
    ref.OrderBy(KEY_PRIORITY).whereGreaterThan(key_priority, 1)


    2 - startAt не определяет первую букву поля.

    Есть два решения - либо вы тянете все записи с приоритетом выше 1(то есть просто
    collectionReference.whereGreaterThan(KEY_PRIORITY, 1)
    ) и уже на клиенте отсеиваете все, которые начинаются не на "А", либо вводите дополнительное поле, например, firstLetter и помещаете туда для каждой записи первую букву. В таком случае запрос будет выглядеть примерно так:

    collectionReference.whereEqualTo("firstLetter", "A").whereGreaterThan(KEY_PRIORITY, 1);


    UPD: как попробуете дайте обратную связь получилось или нет)
    Ответ написан
    2 комментария
  • Что может значить термин токен авторизации?

    @luna3956
    то в данном случае номер сессии является синонимом токена авторизации?

    В общих чертах похоже, да, но все же это разное. Если в двух словах, то речь о разных способах аутентификации - на основе куки и на основе токенов(чаще всего jwt-токен имеется в виду, так что для подробностей гуглите именно это).

    В первом случае(на основе куки) в общих чертах происходит следующее: после отправки пользователем своих данных(логина и пароля) на сервере создается id сессии, этот айдишник записывается в базу данных и помещается в куки браузера пользователя. Затем при каждом обращении пользователя к серверу айдишник сессии из куки сверяется с айдишником сессии в базе данных, если совпадают - все ок.

    Во втором случае(на основе токенов) происходит следующее: пользователь отправляет логин и пароль, если все норм то в ответ на это сервер возвращает подписанный jwt-токен. На клиенте этот токен куда-нибудь сохраняется(например в локальную базу) после чего в каждый запрос отправленный клиентом добавляется этот самый jwt-токен. Сервер декодит полученный токен и если все норм то запрос обрабатывается. Ну и отмечу, что и в этом случае можно хранить jwt-токен в тех же куках и брать на проверку на оттуда, это уже не суть важно.

    Способы похожи, но все же разные. В первом случае есть так называемое состояние - то есть и сервер и клиент должны хранить айдишник сессии, сервер мониторит/ведет эти сессии в базе данных и т.д. В случае же с jwt-токеном от понятия состояние по сути избавляемся - серверу не важно кто вошел в систему, с помощью какого именно токена и т.д. То есть в данном случае токен самодостаточен и кроме этого токена серверу ничего больше не надо чтобы определить все ок или нет.
    Ответ написан
    Комментировать
  • Старт в бэкенд-разработке (Python). Можно ли обойтись без знания фронтенд-технологий?

    @luna3956
    Ваш вопрос: могу ли я быть вратарем если не умею быть нападающим?
    Вообще фуллстек придуман чтобы работодатель экономил деньги и платил одну зарплату вместо двух)
    В мире существует довольно мало крутых серьезных проектов, где есть фуллстеки, а может и вовсе нет. Это два разных мира, изучайте то, что вам по душе, будьте крутым специалистом и будете востребованы даже если 9 из 10 вакансий на headhunter будут искать фуллстек. Ну и знать основы разметки и иметь приблизительное понимание как там все устроено это необходимая основа, но быть полноценным фронт-спецом уж точно не надо
    Ответ написан
    Комментировать
  • Почему запрос дублирует данные?

    @luna3956
    Потому, что в таблице Tours один отель может фигурировать более одного раза, в зависимости от дат тура(fromDate И toDate). Если у вас цена фиксированная для любых дат, то джойните не таблицу Tours а такое:
    ...
    inner join (select distinct hotelId,price from Tours)

    Если же цена может быть разной в зависимости от дат, то произошедшее "дублирование" логически правильно. просто добавьте вывод дат из таблицы Tours в ваш запрос и увидите
    Ответ написан
  • Какие материалы можете посоветовать по архитектуре программных продуктов?

    @luna3956
    Все доступно в сети для скачивания:

    5c62e037d3c0e761976723.png5c62e0667cb67812189008.png5c62e06f1911e083548263.png5c62e0f1ed4e6305750220.png
    Ответ написан
    Комментировать
  • На чем написать приложение для телефона?

    @luna3956
    Если приложение нужно для IOS - приложения пишутся на objective c или swift.
    Если андроид - на java или kotlin.
    Если хотите сэкономить время и ресурсы - выбирайте кроссплатформенные решения(то есть сразу на две платформы), наиболее сильные игроки - xamarin forms, react native, flutter.
    Ответ написан
    Комментировать
  • Запрос к MySql?

    @luna3956
    select
        id, count(sex) as cnt
    from Tab
    where room=2 and sex=2
    group by id
    having count(sex) <= 6
    Ответ написан
  • Как в firebase получить сначала _не_решенные задачи?

    @luna3956
    Добавить для каждой задачи флаг решена она или нет, например, назвать его solved, пусть 1 означает решена, 0 - не решена(true и false какое-то время назад некорректно работали поэтому на всякий лучше числовые значения использовать). И при обращении к коллекции указать что хотите получить только те, которые не решены(то есть у которых solved = 0) через equalTo. Про equalTo подробно здесь. Структура, соотвественно, будет:
    tasks
     taskKey1
        taskID
        taskName
        solved
        ...
      taskKey2
        taskID
        taskName
        solved
         ....
    Ответ написан
    7 комментариев
  • Как набрать начальную аудиторию для нового проекта?

    @luna3956
    Оформляю как ответ) :
    Это классическая проблема маркетплейсов. Пользователи не приходят, потому что нет товаров/контента, авторы/продавцы не приходят, потому что нет пользователей. Панацеи нет, к сожалению. Тем не менее, Вам нужно начинать с привлечения авторов. Ищите их на различных площадках(тот же Хабр, Spark, VC), просите их помочь, предлагайте им за то что они будут у вас публиковать свои статьи плюшки в будущем какие-нибудь и тд. Создайте десяток-другой фейковых авторов и статей, создайте видимость активности. И вот когда у вас будет хоть какой-то визуальный намек на то что площадка живая, тогда попробуйте нагнать какой-нибудь трафик(выделите тысяч 10 рублей на рекламу в каких-нибудь группах вк, телеграм и тд) - получите сотню другую пользователей. И так постепенно шаг за шагом наращивайте аудиторию. На самом деле если быть честным очень сложно раскрутить маркетплейс в наше время не вкладывая кучу денег, тем не менее, если сильно захотеть, то можно все. Удачи)
    Ответ написан
    Комментировать