Запросить столбец таблицы на основе значения другого столбца таблицы для пользовательских настроек? - PullRequest
0 голосов
/ 16 апреля 2020

Я не уверен, является ли это лучшим способом сделать это или нет, но у меня есть таблица jobs, по которой пользователь может искать на моем веб-сайте. Я хочу сохранить настройки фильтра пользователей в другой таблице под названием filter_prefs.
Единственный способ, которым я могу это воспринимать, заключается в том, что когда пользователь ищет вакансии, мне приходится выбирать категории работ в зависимости от того, какая категория выберите и запросите базу данных для заданий. Таким образом, когда пользователь «выбирает» флажок, он удаляет списки, но не флажок. Одновременно я сохраняю это как 0 в этом столбце категории filter_pref, так что если пользователь возвращается и загружает задания, флажок будет загружаться на веб-сайт, но не проверяться, таким образом не вызывая запрос для этой категории в заданиях .

      jobs                            filter_prefs
+-----+-----+----------+------+      +-----+------------+---------+--------+
| jid | pay | category | Title       | uid | Contractor | Teacher | Driver |
+-----+-----+----------+------+      +-----+------------+---------+--------+
|  5  | 15  |Contractor|Roofer|      |  4  |     0      |    1    |    1   |
|  6  | 20  |  Teacher |  Bio |      +-----+------------+---------+--------+
|  7  | 18  |  Driver  |  LTL |
+-----+-----+----------+------+  

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запрашиваю категории из таблицы, мне нужно запросить в таблице filter_prefs точный столбец, который был запрошен в первом fetch l. oop оператора, который заставляет меня объединить строку запроса для столбца. Я продолжаю читать, как это самоубийство. это нормально?

$sql="SELECT DISTINCT category FROM jobs WHERE status='o'";
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($category);
    while($stmt->fetch()){

$sql="SELECT '.$category.' FROM filter_prefs WHERE uid=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $_SESSION['uid']);
$stmt->execute();
$stmt->bind_result($status);
$product_cat ='';
    while($stmt->fetch()){
if($status==1){
$product_cat .= // MARK CHECKED, $CATEGORY AS TITLE.

}if($status==0){
$product_cat .= // MARK UNCHECKED, $CATEGORY AS TITLE.
}
}
}
echo $product_cat;

Я действительно новичок в MySQL и PHP, так что я просто не могу понять другой способ сделать это. Есть ли лучший способ сохранить пользовательские настройки, вытащить их и повлиять на состояние веб-сайта? Я не смог найти там материала, который бы показал, как это сделать. Спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Ваш filter_prefs должен быть

   uid jid
   4   6
   4   7

Таким образом, задания пользователя будут такими:

SELECT uid, category
FROM filter_prefs
JOIN jobs
 USING jid

Сохраняйте структуру данных логической, чтобы ее можно было легко запрашивать и сделать php слой представления вмещает презентацию.

Если вы вытаскиваете поле из строки и пытаетесь сопоставить его с другим именем таблицы, вы сделали что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...