За последние 24 часа нас посетили 21633 программиста и 1031 робот. Сейчас ищут 712 программистов ...

Получить содержимое с условием (MSSQL)

Тема в разделе "MSSQL", создана пользователем Decaz, 14 июн 2006.

  1. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Здравствуйте! Есть таблица 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, то выводиться будут оба числа, то есть возможны любые комбинации. Если же не найдено ни одного из заданных чисел, то будет выводиться фраза "Нет результатов". Я написал вот такой код:
    Код (Text):
    1. <select name="item" id="item">
    2. <?
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result=mssql_query("select * from user_item where user_id=445 and wh=0");
    6. $res=mssql_fetch_assoc($result);
    7. ///if ($res['item_type'] == 67) {$first = 1;} else {$first = 0;};
    8. if ($res['item_type'] == 82) {$second = 1;} else {$second = 0;};
    9. if ($first == 1)...?///
    10. echo '<option value='.$itog.'</option>';
    11. ?>
    12. </select>
    Часть кода, выделенная знаками "///", - это тот момент, в котором я не могу разобраться, а именно в реализации условия для выполнения скрипта, помогите пожалуйста с кодом...
     
  2. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <select name="item" id="item">
    2. <?php
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result = mssql_query('SELECT * FROM user_item WHERE user_id="445" AND wh="0" AND (item_type="67" OR item_type="82")');
    6. if (mssql_num_rows($result) < 1)
    7. {
    8.    print '<option value="-1">нет рузультатов</option>';
    9. }
    10. else
    11. {
    12.    while ($row = mssql_fetch_assoc($result))
    13.    {
    14.       print '<option value="' . $row['item_type'] . '">' . $row['item_type'] . '</option>';
    15.    }
    16. }
    17. ?>
    18. </select>
    оно?
     
  3. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Да, спасибо, только не mysql, а mssql :)
     
  4. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    опечатался. бывает. :)
     
  5. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Вот ещё одна проблема возникла, он выводит в селектор то, что нужно, только пятикратно... то есть вместо нужных, к примеру 3-ёх строчек, он выводит эти 3 строчки 5 раз подряд в одном селекторе... в чём может быть проблема?
     
  6. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. DISTINCT(item_type)
    ?
     
  7. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Не понял... :?
     
  8. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. SELECT DISTINCT(item_type) FROM user_item WHERE user_id="445" AND wh="0" AND (item_type="67" OR item_type="82")
     
  9. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Странно, но теперь весь селектор пустой...
     
  10. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Просто в Query Analyzer он мне 3 строки выдаёт, то есть правильно, а вот на сайте 5 X 3...
     
  11. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    покажи код
     
  12. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Код (Text):
    1. <select name="item" id="item">
    2. <?php
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result = mssql_query('SELECT * FROM user_item WHERE user_id="445" AND wh="0" AND item_type IN (67, 82)');
    6. $rows=mssql_num_rows($result);
    7. if ($rows<1)
    8. {
    9. print '<option value="-1">нет результатов</option>';
    10. }
    11. else
    12. {
    13.    while ($row = mssql_fetch_assoc($result))
    14.    {
    15.       if ($row['item_type']==67) {$name=first;};
    16.       if ($row['item_type']==82) {$name=second;};
    17.       print '<option value="' . $row['item_type'] . '">' . $name . '</option>';
    18.    }
    19. }
    20. ?>
    21. </select>
    У меня в таблице item'ов с type'ом 67 два, поэтому должно отображаться всего 3 строки в селекторе, а отображаются они пятикратно...
     
  13. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    1. Выведи mssql_num_rows
    2. Выведи все результаты запроса целиком: while($row=mssql_fetch_assoc($result)) print_r($row);

    Ибо если он из одной таблицы по одному простому запросу выдергивает одни и те же строки несколько раз, то ето есть большой глюк
     
  14. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    В смысле так (выделено знаками "///")?
    Код (Text):
    1. <select name="item" id="item">
    2. <?php
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result = mssql_query('SELECT * FROM user_item WHERE user_id="445" AND wh="0" AND item_type IN (67, 82)');
    6. ///$rows=mssql_num_rows($result);///
    7. if ($rows<1)
    8. {
    9. print '<option value="-1">нет результатов</option>';
    10. }
    11. else
    12. {
    13.    while ($row = mssql_fetch_assoc($result)) ///print_r($row);///
    14.    {
    15.       if ($row['item_type']==67) {$name=first;};
    16.       if ($row['item_type']==82) {$name=second;};
    17.       print '<option value="' . $row['item_type'] . '">' . $name . '</option>';
    18.    }
    19. }
    20. ?>
    21. </select>
    Если так, то весь селектор пустой...
     
  15. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Йад в студию!!! :)
    Ва-первых, вывести - это print, echo, var_dump, или чтото подобное
    Ва-вторых, все что находится между тэгами <select> и </select> и не является <option> браузер и не покажет, либо закомменти селект либо смотри HTML страницы. Результаты сюда плз
     
  16. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    :D Сделал так:
    Код (Text):
    1. <select name="item" id="item">
    2. <?php
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result = mssql_query('SELECT * FROM user_item WHERE user_id="445" AND wh="0" AND item_type IN (67, 82)');
    6. $rows=mssql_num_rows($result);
    7. if ($rows<1)
    8. {
    9. print '<option value="-1">нет результатов</option>';
    10. }
    11. else
    12. {
    13.    while ($row = mssql_fetch_assoc($result))  
    14.    {
    15.       if ($row['item_type']==67) {$name=first;};
    16.       if ($row['item_type']==82) {$name=second;};
    17.       print '<option value="' . $row['item_type'] . '">' . $name . ' - '.$rows.' - '.print_r($row).'</option>';
    18.    }
    19. }
    20. ?>
    21. </select>
    Теперь в селекторе 4 одинаковые строки с содержанием "- 2 - 1"...
     
  17. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Эээ.. я вобчета думал что ты выполниш примерно такой код:
    Код (Text):
    1.  
    2. <?php
    3. mssql_connect("127.0.0.1","sa","pass");
    4. mssql_select_db("users");
    5. $result = mssql_query('SELECT * FROM user_item WHERE user_id="445" AND wh="0" AND item_type IN (67, 82)');
    6. print(mssql_num_rows($result));
    7. while($row=mssql_fetch_assoc($result)) print_r($row);
    8. ?>
    безо всяких там селекторов..
     
  18. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    3Array ( [item_id] => 66444 [user_id] => 445 [item_type] => 885 [wh] => 0 ) Array ( [item_id] => 66446 [user_id] => 445 [item_type] => 885 [wh] => 0 ) Array ( [item_id] => 82856 [user_id] => 445 [item_type] => 4687 [wh] => 0 )
     
  19. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Ну как видишь, запрос честно вывел тебе три результата. Сталбыть проблема не в mssql и скорей всего не в php. Может ты в яваскрипте чтото с этим селектом делаеш? А посмотри-ка HTML-код своего изначального примера и посчитай сколько OPTION он там сделал...
     
  20. Decaz

    Decaz Активный пользователь

    С нами с:
    14 июн 2006
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Ура! :) Спасибо, всё получилось!