За последние 24 часа нас посетили 38623 программиста и 1284 робота. Сейчас ищут 1086 программистов ...

Выбор таблицы с помощью переменной

Тема в разделе "PHP для новичков", создана пользователем Calloop, 9 апр 2017.

  1. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Здравствуйте!
    Я учусь выводить данные в таблицу путем живого поиска: пишешь слово "золото" или его часть "зол", и на сайте моментально выводится это слово в таблицу.
    Использую redbean.
    Когда запрос требовал данные из колонки, он легко применялся по такому типу:
    $table = R::getAll ( " SELECT * from $table_name WHERE `word` LIKE '$search%' " );

    LIKE помогал с помощью "%" писать слово не до конца, чтобы еще с первой буквы начался его поиск.

    Однако сейчас необходимо по подобному образу сделать так, чтобы при вводе в поиск слова, оно становилось названием таблицы, из которой я дальше буду доставать данные.
    И тогда я остановился на таком варианте:
    $table = R::getAll ( " SELECT * FROM {$search} " );

    Здесь я не могу понять, как реализовать знак "%". То есть, такой запрос выведет нужную мне таблицу только когда я введу ее имя полностью. Подскажите, пожалуйста, как решить проблему?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    неправильная архитектура.
     
  3. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Я хочу сделать себе и знакомым для изучения английского языка сайт.
    Запланировал, что у каждого пользователя будет своя таблица (словарь). Эти таблицы будут храниться в первой БД.
    Чтобы заполнить словарь, необходимо в поисковик ввести слово, которого нет в словаре. Поисковик начнет обращаться ко второй БД, в которую я решил поместить в виде таблиц английские слова. В каждой таблице будут варианты перевода слова, а первым столбцом будет id (понадобится дальше).
    Таким образом, пользователь пишет слово в поисковик добавляет его в словарь, и тогда в словаре данные о слове и его переводах будут браться через id из второй БД, а дата добавления слова будет браться из первой БД.

    Был вопрос, как правильно сделать: вторую БД, в которой сделать по таблице для каждого слова, и в таблицах размещать переводы слова, или же оставить одну БД, сделать таблицу и поместить в нее столбцы "слово", "перевод 1", "перевод 2" и т.д., но мне показалось, что второй вариант будет гораздо медленнее работать, если пользователь начнет добавлять новые варианты перевода у слова (словарь со всеми словами из второй БД будет заполняться не только мною, но и пользователями). Ведь тогда придется ему ждать, пока вся таблица не обновится.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    конец.
    Неправильная архитектура.
    Запланируй одну таблицу.
    --- Добавлено ---
    как-как?
     
    Calloop нравится это.
  5. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Когда учился регистрировать пользователей на сайте, показали, что надо сделать одну таблицу, в которой будут id пользователей, никнеймы, почта и т.д. Но разве так можно сделать со словарями пользователей? Какая-то ж каша получится, что в одной таблице слова разных пользователей, как минимум.
    Также читал, что нагрузка будет больше от одной таблицы с 1000 значений, чем от 10 таблиц со 100 значениями. Тогда каждый пользователь, если ему принадлежит одна из этих 10 таблиц, будет грузить 100 значений, а не 1000. Или это не так?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно =) просто добавь id
    --- Добавлено ---
    когда читаешь, ищи доказательства. на слово верить - это не для взрослых людей.

    ты поверишь мне, если я отвечу?
     
  7. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Если я нахожу ответ, отличный от того, с которым решился, то лишний раз его перепроверяю, особенно если учусь)
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Calloop нравится это.
  9. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Ага, до меня дошло, что WHERE для таблиц не бывает, и лучше уж будет сто раз выводиться в колонке id пользователя, чем подписывать таблицу именем пользователя, и потом ее выискивать среди других таблиц без индексации.
    Спасибо за мысли и за ссылки.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    точно
    поздравляю, чо. Ты на верном пути.
     
  11. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Еще раз спасибо за ответ. Пойду менять архитектуру, а тему можно закрывать =)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    мы не закрываем темы. всегда есть возможность высказаться =)
     
  13. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Тогда отпишусь об итоге, когда закончу, для примера другим :)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) круто. Отпишишь. Мы тебе ещё про инъекции расскажем.
     
  15. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Извиняюсь за оффтоп, но хочу сказать, как же КРУТО, что существует mysql. Весь день убил на понимание его запросов с условиями и объединениями, перебрал тонны вариантов решения возникшей проблемы и через php, и через mysql, в итоге теперь могу в одну строку запроса вписывать ТАКИЕ жуткие вещи, но главное, что они работают, и даже приятненько писать для них условия :rolleyes:
     
    denis01 нравится это.
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Поздравляю! Ещё есть всякие другие штуки типа редиса, монги и кеша прямо в пхп
     
  17. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Теперь я просто обязан умолять попросить написать то же самое, но в виде оригинальных названий перечисленного, чтобы я мог про это загуглить :oops:
    Дурацкие колледжи и подобные учебные заведения ни фига не могут грамотно преподавать программирование, в моем случае. Приходится все делать самому, включая поиск инфы.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    прочти про APC
    потом про Memcached
    потом про Redis

    потом про PostgreSQL

    потом про MongoDB

    потом про websockets

    потом про javascript, coffeescript и typescript

    потом про Single Page Application - SPA
    потом про Progressive Web Apps - PWA

    потом про reactjs, angularjs, vuejs
    потом про nodejs

    потом про react redux, vue vuex

    потом про golang

    просто прочитай про всё это. не пытайся запомнить. просто попытайся понять.
     
    denis01 и Calloop нравится это.
  19. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Большое спасибо!
    Именно, главное, чтобы я знал об их существовании и общей задаче. А подробнее буду изучать, когда их функционал понадобится на практике :3
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на телефоне гугли, на толчке читай. очень удобно.
     
  21. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Так и получается, только еще запущеннее (никакого больше колледжа и полноценного сна) :D Но и от сайта нельзя отвлекаться.
    Прочел про все кратко, теперь хоть знаю, что не один mysql существует. Некоторые вещи из списка сейчас пригодятся.
    Но больная для меня тема - когда изучаешь что-то, а потом натыкаешься на чудеса современности. Как, например, учил css, а теперь достаточно поставить bootstrap, предварительно настроив. Или учил mysql, а там уже mysqli и даже redbeanphp появился. Хорошо хоть основа почти остается.
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    pdo, prepared statements и прилипни к ним на ближайшие три года.
     
    Calloop нравится это.
  23. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    И все-таки, одна таблица для всех словарей пользователей не позволяет избежать ошибки в одном пункте.
    В этой таблице накапливаются записи с одними и теми же ID слов, но с разными ID пользователей, которым они принадлежат. И из-за этого, если человек еще не имеет определенного слова, то ему предлагаются в вариантах новых слов по нескольку раз одно и то же слово, т.к. оно добавлено у других пользователей.
     
  24. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Знаю, что должен помочь GROUP BY, но как его на уже полученные из запроса значения применить? Ну, или как грамотно вложенный запрос с ним написать, чтобы выводилось только одно слово, если их несколько?
     
    #24 Calloop, 12 апр 2017
    Последнее редактирование: 12 апр 2017
  25. Calloop

    Calloop Новичок

    С нами с:
    9 апр 2017
    Сообщения:
    35
    Симпатии:
    2
    Хотя, есть еще задумка, для одного и того же слова делать не несколько записей в таблице, если id пользователей, которым слово принадлежит, разный, а делать одну запись для каждого слова, но добавлять в нее по столбцу для каждого пользователя, который добавил слово. Прокатит? Только тогда дофигалион столбцов будет в этой таблице, зато таблица останется одна.
     
    #25 Calloop, 12 апр 2017
    Последнее редактирование: 12 апр 2017