Здравствуйте! Я учусь выводить данные в таблицу путем живого поиска: пишешь слово "золото" или его часть "зол", и на сайте моментально выводится это слово в таблицу. Использую redbean. Когда запрос требовал данные из колонки, он легко применялся по такому типу: $table = R::getAll ( " SELECT * from $table_name WHERE `word` LIKE '$search%' " ); LIKE помогал с помощью "%" писать слово не до конца, чтобы еще с первой буквы начался его поиск. Однако сейчас необходимо по подобному образу сделать так, чтобы при вводе в поиск слова, оно становилось названием таблицы, из которой я дальше буду доставать данные. И тогда я остановился на таком варианте: $table = R::getAll ( " SELECT * FROM {$search} " ); Здесь я не могу понять, как реализовать знак "%". То есть, такой запрос выведет нужную мне таблицу только когда я введу ее имя полностью. Подскажите, пожалуйста, как решить проблему?
Я хочу сделать себе и знакомым для изучения английского языка сайт. Запланировал, что у каждого пользователя будет своя таблица (словарь). Эти таблицы будут храниться в первой БД. Чтобы заполнить словарь, необходимо в поисковик ввести слово, которого нет в словаре. Поисковик начнет обращаться ко второй БД, в которую я решил поместить в виде таблиц английские слова. В каждой таблице будут варианты перевода слова, а первым столбцом будет id (понадобится дальше). Таким образом, пользователь пишет слово в поисковик добавляет его в словарь, и тогда в словаре данные о слове и его переводах будут браться через id из второй БД, а дата добавления слова будет браться из первой БД. Был вопрос, как правильно сделать: вторую БД, в которой сделать по таблице для каждого слова, и в таблицах размещать переводы слова, или же оставить одну БД, сделать таблицу и поместить в нее столбцы "слово", "перевод 1", "перевод 2" и т.д., но мне показалось, что второй вариант будет гораздо медленнее работать, если пользователь начнет добавлять новые варианты перевода у слова (словарь со всеми словами из второй БД будет заполняться не только мною, но и пользователями). Ведь тогда придется ему ждать, пока вся таблица не обновится.
Когда учился регистрировать пользователей на сайте, показали, что надо сделать одну таблицу, в которой будут id пользователей, никнеймы, почта и т.д. Но разве так можно сделать со словарями пользователей? Какая-то ж каша получится, что в одной таблице слова разных пользователей, как минимум. Также читал, что нагрузка будет больше от одной таблицы с 1000 значений, чем от 10 таблиц со 100 значениями. Тогда каждый пользователь, если ему принадлежит одна из этих 10 таблиц, будет грузить 100 значений, а не 1000. Или это не так?
можно =) просто добавь id --- Добавлено --- когда читаешь, ищи доказательства. на слово верить - это не для взрослых людей. ты поверишь мне, если я отвечу?
Если я нахожу ответ, отличный от того, с которым решился, то лишний раз его перепроверяю, особенно если учусь)
проанализируй поведение бд и подумай, что и как ей было удобнее. но сначала прочти про индексы https://www.google.com/search?q=mysql+indexes --- Добавлено --- и да, на английском. вот тебе словарик https://www.lingvolive.com/en-us
Ага, до меня дошло, что WHERE для таблиц не бывает, и лучше уж будет сто раз выводиться в колонке id пользователя, чем подписывать таблицу именем пользователя, и потом ее выискивать среди других таблиц без индексации. Спасибо за мысли и за ссылки.
Извиняюсь за оффтоп, но хочу сказать, как же КРУТО, что существует mysql. Весь день убил на понимание его запросов с условиями и объединениями, перебрал тонны вариантов решения возникшей проблемы и через php, и через mysql, в итоге теперь могу в одну строку запроса вписывать ТАКИЕ жуткие вещи, но главное, что они работают, и даже приятненько писать для них условия
Теперь я просто обязан умолять попросить написать то же самое, но в виде оригинальных названий перечисленного, чтобы я мог про это загуглить Дурацкие колледжи и подобные учебные заведения ни фига не могут грамотно преподавать программирование, в моем случае. Приходится все делать самому, включая поиск инфы.
прочти про 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 просто прочитай про всё это. не пытайся запомнить. просто попытайся понять.
Большое спасибо! Именно, главное, чтобы я знал об их существовании и общей задаче. А подробнее буду изучать, когда их функционал понадобится на практике :3
Так и получается, только еще запущеннее (никакого больше колледжа и полноценного сна) Но и от сайта нельзя отвлекаться. Прочел про все кратко, теперь хоть знаю, что не один mysql существует. Некоторые вещи из списка сейчас пригодятся. Но больная для меня тема - когда изучаешь что-то, а потом натыкаешься на чудеса современности. Как, например, учил css, а теперь достаточно поставить bootstrap, предварительно настроив. Или учил mysql, а там уже mysqli и даже redbeanphp появился. Хорошо хоть основа почти остается.
И все-таки, одна таблица для всех словарей пользователей не позволяет избежать ошибки в одном пункте. В этой таблице накапливаются записи с одними и теми же ID слов, но с разными ID пользователей, которым они принадлежат. И из-за этого, если человек еще не имеет определенного слова, то ему предлагаются в вариантах новых слов по нескольку раз одно и то же слово, т.к. оно добавлено у других пользователей.
Знаю, что должен помочь GROUP BY, но как его на уже полученные из запроса значения применить? Ну, или как грамотно вложенный запрос с ним написать, чтобы выводилось только одно слово, если их несколько?
Хотя, есть еще задумка, для одного и того же слова делать не несколько записей в таблице, если id пользователей, которым слово принадлежит, разный, а делать одну запись для каждого слова, но добавлять в нее по столбцу для каждого пользователя, который добавил слово. Прокатит? Только тогда дофигалион столбцов будет в этой таблице, зато таблица останется одна.