powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP + MSSQL) Получить содержимое с условием
4 сообщений из 4, страница 1 из 1
(PHP + MSSQL) Получить содержимое с условием
    #33791631
Decaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Есть таблица user_item, в ней есть колонки user_id, item_type и wh. Мне необходимо, чтобы для пользователя с id, равным, к примеру, 445 вычислялись все item_type'ы при условии, что wh равен нулю и затем выдавался результат в виде select'а (<select>...</select>), а в этом select'е для выбора отображались только item_type'ы, равные, к примеру, 67 и 82, если они были найдены по-условию. То есть, если при выполнении условий имеется item_type, равный 82, но нет item_type'а, равного 67, а при этом существует ещё сколько угодно item_type'ов, удовлетворяющих условию, но не равных 67 или 82, то выводиться в select будет только число 82, а если найдены и 67, и 82, то выводиться будут оба числа, то есть возможны любые комбинации. Если же не найдено ни одного из заданных чисел, то будет выводиться фраза "Нет результатов". Я написал вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<select name="item" id="item">
<?
mssql_connect("127.0.0.1","sa","pass");
mssql_select_db("users");
$result=mssql_query("select * from user_item where user_id=445 and wh=0");
$res=mssql_fetch_assoc($result);
[color=red]if ($res['item_type'] ==  67 ) {$first =  1 ;} else {$first =  0 ;};
if ($res['item_type'] ==  82 ) {$second =  1 ;} else {$second =  0 ;};
if ($first ==  1 )...?[/color]
echo '<option value='.$itog.'</option>';
?>
</select>
Часть кода, выделенная красным цветом, это тот момент, в котором я не могу разобраться, а именно в реализации условия для выполнения скрипта, помогите пожалуйста с кодом...
...
Рейтинг: 0 / 0
(PHP + MSSQL) Получить содержимое с условием
    #33791662
Фотография Robert Tappan Moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для решения вашей проблемы нужно сначала пройти все строки результата запроса и по ним определить что есть чего нет, а уже потом решать что выводить, а что не надо. В Вашем же примере происходит анализ первой строки и всё.

Возможно я не совсем правильно понял Ваше условие, но насколько понял:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<select name="item" id="item">
<?
	// обнулить никогда не помешает
	$first = $second = $other = false;

	// массив искомых item_type`ов
	$toFind = Array( 67 , 82 );

	mssql_connect("127.0.0.1","sa","pass");
	mssql_select_db("users");
	$result=mssql_query("select * from user_item where user_id=445 and wh=0");

	// проход по выборке и просмотр всех записей на предмет нужных item_type`ов
	while( $res=mssql_fetch_assoc($result) ) {
		// есть ли первый
		$first = ($first||($res['item_type'] == $toFind[ 0 ]));
		// есть ли второй
		$second = ($second||($res['item_type'] == $toFind[ 1 ]));
		// есть ли другие варианты
		$other = ($other||(!in_array($res['item_type'],$toFind)));
	}

	// решаем что делать
	if ($first&&$second) {
		// есть оба item_type
		echo '<option value='.$toFind[ 0 ].'>'.$toFind[ 0 ].'</option>';
		echo '<option value='.$toFind[ 1 ].'>'.$toFind[ 1 ].'</option>';
	} elseif ($first) {
		// есть только первый item_type
		echo '<option value='.$toFind[ 1 ].'>'.$toFind[ 1 ].'</option>';
	} elseif ($second) {
		// есть только второй
		echo '<option value='.$toFind[ 1 ].'>'.$toFind[ 1 ].'</option>';
	} else {
		if ($other) {
			// искомых нет ниодного, но есть другие
			echo '<option value=-1>Ничего не найдено</option>';
		} else {
			// нет ниодного
			echo '<option value=-1>Ничего не найдено</option>';
		}
	}
?>
</select>

P.S. Не очень понятно Вы описали возможные ситуации, поэтому я догадывался как мог, думаю по комментариям разберётесь как поправить под свои нужды.



...
Рейтинг: 0 / 0
(PHP + MSSQL) Получить содержимое с условием
    #33791725
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На обум:
Код: plaintext
1.
2.
3.
$result=mssql_query("SELECT * FROM user_item WHERE user_id=445 AND wh=0 AND (item_type=67 OR item_type=82");
//или же
$result=mssql_query("SELECT * FROM user_item WHERE user_id=445 AND wh=0 AND item_type IN (67, 82)");
-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
(PHP + MSSQL) Получить содержимое с условием
    #33791726
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, ачепятка:
Код: plaintext
$result=mssql_query("SELECT * FROM user_item WHERE user_id=445 AND wh=0 AND (item_type=67 OR item_type=82)");

-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP + MSSQL) Получить содержимое с условием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]