PHP: strval в предложении WHERE

В настоящее время у меня есть часть кода, которая функционирует нормально, как есть. Но я действительно хочу сделать часть <? PHP if strval ..?> и поместить ее в проекты "SELECT * FROM " как WHERE . Я не уверен, возможно ли это или как это сделать. Любые мысли будут действительно оценены. Надеюсь, это имеет смысл.

<?php 

//  ** User ID
$userid = $row_listelements ['id'];

// ** Projects
mysql_select_db($database_db, $db);
$query_activeusers = "SELECT * FROM projects ";
$activeusers = mysql_query($query_activeusers, $db) or die(mysql_error());
$row_activeusers = mysql_fetch_assoc($activeusers);
$totalRows_activeusers = mysql_num_rows($activeusers);

?>

<? do {?>

<?php if (!(strpos($row_activeusers['assignedto'], strval(",".$userid.",")) === false)) { ?>
<div><?=$row_activeusers['jobnumberdisplay'];?></div>
<?php } ?>

<? } while ($row_activeusers = mysql_fetch_assoc($activeusers)); ?>    

<?php echo $totalRows_activeusers; ?>
0
nl ja de
Получаю ли я это право, поле «assignto» является разделенной запятой строкой идентификаторов пользователей, и вы хотите проверить, является ли текущий идентификатор пользователя частью этого?
добавлено автор axel.michel, источник

3 ответы

Если ваш идентификатор пользователя является уникальным номером, и я правильно понимаю ваш вопрос, вы можете достичь этого:

используя IN - может обрабатывать строки и номера (они имеют быть уникальным для выполнения этой работы):

$query_activeusers = "SELECT * FROM projects WHERE ".$userid." IN (assignedto)";

или с помощью FIND_IN_SET - может handle Строки и номера чувствительны к регистру:

$query_activeusers = "SELECT * FROM projects WHERE FIND_IN_SET('".$userid."', assignedto)"

Но я думаю, вам стоит взглянуть на ваш дизайн базы данных. Проблема с включением внешних ключей в список с разделителями, подобный этому, заключается в том, что вся точка внешнего ключа позволяет вам быстро найти информацию в другой таблице, используя индексы. Внедряя базу данных, как она звучит, у вас есть всевозможные проблемы для решения.

1
добавлено
Привет Аксель, Спасибо за ваш ответ. FIND_IN_SET работал в обаянии. Я знаю, что структура базы данных, скорее всего, не идеальна. Я на самом деле не кодер и просто делаю небольшой db, который позволяет мне отслеживать несколько проектов. Кажется, что все в порядке. Еще раз спасибо за вашу помощь - это очень ценится.
добавлено автор Brandrally, источник

Если я правильно понял ваш код, вы должны использовать SQL LIKE , то есть что-то вроде:

$query_activeusers = "SELECT * FROM projects WHERE assignedto LIKE '%," . 
   ((int) $userid) . ",%'";

Приведение в (int) здесь выполняется, чтобы убедиться, что у вас нет специальных символов SQL в $ userid - вид дешевого предложения SQL для значений, которые являются целыми числами. Вам не нужно использовать strval , поскольку конкатенация в строку преобразует это число в строку.

1
добавлено
Вроде не равно !!!
добавлено автор One Man Crew, источник
Кроме того, это не является частью ответа, но тот факт, что вы должны использовать LIKE, вероятно, указывает на некоторые анти-шаблоны в вашей структуре SQL DB. Я предполагаю, что вам, вероятно, нужна таблица отношений «один ко многим», например: «Проекты SELECT». FROM проектов JOIN projects_to_users ON projects.id = projects_to_users.project_id WHERE projects_to_users.user_id = ". (int) $ userid; Конечно, я ничего не знаю о вашей структуре БД, но вы действительно должны читать таблицы отношений один-ко-многим или многие-ко-многим.
добавлено автор shevron, источник
Конечно, это не равно, и ни один из них не является strpos в его исходном коде.
добавлено автор shevron, источник

Я не уверен, но, может быть, это поможет вам.

if(strval ...)
{
   $where = "where field = $value";
}

Теперь вы можете использовать эту переменную $ where в выбранном запросе. он будет выполняться, только если ваш if condition удовлетворяет.

0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp