За последние 24 часа нас посетили 18073 программиста и 1700 роботов. Сейчас ищут 1522 программиста ...

Сложная фильтрация

Тема в разделе "PHP и базы данных", создана пользователем Evgenmi, 21 июн 2006.

  1. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Есть база с перечнем товаров. База состоит из
    ID,namenovanie, cena,tip,p_tip
    В p_tip много типов , соответственно в namenovanie перечень товаров.
    Делаю так
    $query="select * from `test` where (`p_tip`='%ATX_%' or `naimenovanie` like '%Microtech%' )order by `id`";
    $result = mysql_query($query) or die("ошибка");
    И всебы ничего , но в наименованиях в других p_tipe встречается слово Microtech неподскажете как мне выбирать только нужные строки.
     
  2. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    А что нужно выбрать?
     
  3. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    p_tip делится к примеру на категории case и kolonki в обоих есть наименование
    Microtech немогу понять как мне построить запрос чтобы в результат выводилось только из case а kolonki неучитывались. Предполагаю что это делается по следством AND но неуверен
     
  4. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    where `p_tip`='%ATX_%' AND `naimenovanie` like '%Microtech%'

    И еще пара замечаний:
    1. Если в запросе нет необходимости использовать скобки, не используй их
    2. Надеюсь ты знаеш что первое сравнение вернет 1 только для строки '%ATX_%', т.е. не будет поиска подстроки
    3. Кстати о поиске подстроки, вместо `naimenovanie` like '%Microtech%' используй INSTR(`naimenovanie`,'Microtech'). Будет работать быстрее
     
  5. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    where `p_tip`='%ATX_%' AND `naimenovanie` like '%Microtech%'
    такое пробывал неработает либо у хостера чтот неподдерживается или даже незнаю чего.
    Естьли другие пути ?????
     
  6. Mavir

    Mavir Guest

    `p_tip`='%ATX_%' будет выполнено, если есть точное совпадение со строкой "%ATX_%" (% будут пониматься именно как символ, а не любые символы). Используй LIKE вместо равно
     
  7. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Like попробывал эффекта ноль.
    Есть мысль, можноли канить выбрать сначала p_tip с case а уже из полученного результата выбрать Microtech ????
     
  8. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    тnaimenovanie| p_tip |
    -----------------------------
    Microtech | case |
    Microtech | case |
    Microtech | kolonki |
    таблица выглядит приперно так. Мне надо чтобы при фильтрации отбирались только из p_tip case , kolonki игнорировались
     
  9. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    если поставиш WHERE p_tip='case' AND naimenovanie='Microtech', то выберется
    на хостера кивать ета предпоследнее дело. последнее - танцевать с бубном ;)
     
  10. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Щас еще раз попробую :D если неполучится буду плясать)))
     
  11. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Неа ноль реакции))) Достаю бубуен и начинаю пляски )))
     
  12. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Если у прова есть панель управления, а в ней mysql admin, то можеш попробовать поиграться с запросами там. вапервых он тебе напишет ошибку если ты ее сделаеш, вовторых там скорей всего будет мастер составления запроса, с помощью которого ты сможеш таки сделать свой вопрос. а уж если там всплывет аномалия (например, запрос который у тебя локально работает, там не хочет), то предъявляеш это прову
     
  13. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Я локально непробывал , поставил локально MySql вообще жуть получилась
    я не специалист в этой области )))) Жизнь заставила
     
  14. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Чтот я запутался вот как я пишу ))))) А вот результат http://www.evgen.blend.ru/case/case.php
    <td><font color='blue' size='3px'><center>MICROTECH</center></font></td>
    </tr>";
    echo "<tr>";
    echo "<td>";
    $query="select * from `test` where (`tip`='case' AND `naimenovanie`='inwin') order by `id`";
    $result = mysql_query($query) or die("Неправильно");
    if (mysql_num_rows($result)==0)
    {
    echo "<table width='99%' height='99%' border='7'>";
    echo "<tr>";
    echo "<td background='http://www.fraktal.ru/img/menu.gif'><font color='red' size='3px'><center>Временно отсутствует</center></font></td>";
    echo "</tr>";
    echo "</table>";
    }
    else // незабываем открывать и закрывать фигурные скобки
    {
    echo "<table width='99%' height='99%' border='7'>";
    echo "<tr>";
    echo "<td width='50%' background='http://www.fraktal.ru/img/menu.gif'><center>Наименование</center></td><td width='10%' background='http://www.fraktal.ru/img/menu.gif'><center>Цена</center></td><td width='2%' background='http://www.fraktal.ru/img/menu.gif'><center>Описание</center></td></tr>";
    while ($line = mysql_fetch_array($result,MYSQL_ASSOC))
    {
    echo "<tr>";
    echo "<td background='http://www.fraktal.ru/img/tire.gif'><font size='2px'>$line[naimenovanie]</font></td><td background='http://www.fraktal.ru/img/tire.gif'><font size='2px'><center>$line[cena]</center></font></td><td background='http://www.fraktal.ru/img/tire.gif'><font size='2px'><a href ='$line[namber]'>Характеристики</a></font></td>";
    echo "</tr>";
    }
    echo "</table>";
    }
    echo "</td>";
     
  15. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    судя по всему он у тебя действительно возвращает 0 результатов. убедись что данные запрашиваются в нужной базе из нужной таблицы, и что там действительно есть строки с такими значениями
     
  16. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    проверял и не раз ))))) вот я сам в шоке
     
  17. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Попробывал вот результат
    SQL-запрос :

    $query = SELECT *
    FROM test
    WHERE tip = 'case' AND naimenovanie
    LIKE '%inwin%'
    ORDER BY id

    Ответ MySQL:
    You have an error in your SQL syntax.
    Check the manual that corresponds to your MySQL server version for the right syntax to use near '$query = SELECT * FROM test WHERE tip = 'case' AND naimenov

    По синтаксису вроде все правильно.
     
  18. olo

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

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    афигеть, дайте две!

    давай, включай моск уже :)
     
  19. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    ????? Всмысле??????
     
  20. alemiks

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

    С нами с:
    22 июн 2006
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Voronezh - Novgorod the Great
    а зачем думать ? ctrl+с ctrl+v :)
    и долго материшься, почему mysql не понимает php операторов :)
     
  21. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Evgenmi, olo имел ввиду, что пора начать думать.
    А еще бы хорошо прочитать что все-таки MySQL написал.
     
  22. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Народ в SQL и PHP я новичек еще и месяца нет как занимаюсь ими.
    И я так пониамю что эта версия MySQL непонимает какого оператора ????
     
  23. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Да, как и все остальные версии MySQL и других SQL-баз.
    Это оператор PHP.
    Почитай про синтаксис PHP и MySQL, а потом занимайся сложной фильтрацией.
    http://www.php.net
    http://www.mysql.ru
    http://www.phpfaq.ru
     
  24. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    Спасибо, удачи )))
     
  25. Evgenmi

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

    С нами с:
    13 июн 2006
    Сообщения:
    24
    Симпатии:
    0
    при таком запросе MySql невыдает сообщение об ошибке, но всеравно неработает (((((
    Как это выглядит в MySql
    SELECT * FROM `test` WHERE `tip`='case' and `naimenovanie`='%inwin%' order by id;
    Как это выглядит в файле
    $query="SELECT * FROM `test` WHERE `tip`='case' and `naimenovanie`='%inwin%' order by id";