SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.02.2008 15:49:41

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

ну вот опять подготовил ужасный вопрос

есть селект SELECT DISTINCT post_7 FROM post WHERE post_5='".$x."' order by post_7 asc
а как сделать что бы если post_7 is NULL то искать не в post_7 а сразу в post_8

заранее спасибо!

Неактивен

 

#2 05.02.2008 15:53:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ну вот опять подготовил ужасный вопрос

SELECT DISTINCT IFNULL(post_7,post_8) FROM post WHERE post_5='".$x."' order by 1

Неактивен

 

#3 05.02.2008 16:22:23

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: ну вот опять подготовил ужасный вопрос

IFNULL раздельно?

Неактивен

 

#4 05.02.2008 16:24:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ну вот опять подготовил ужасный вопрос

Нет, слитно, это такая специальная функция: http://dev.mysql.com/doc/refman/5.0/en/ … tions.html

Неактивен

 

#5 05.02.2008 16:26:40

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: ну вот опять подготовил ужасный вопрос

СПАСИБО! выручили!

Неактивен

 

#6 05.02.2008 16:49:48

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: ну вот опять подготовил ужасный вопрос

кстати. а вот "order by 1" - это сортровка по чему? какие поле или словие придерживается в таком случае?

Неактивен

 

#7 05.02.2008 17:02:40

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: ну вот опять подготовил ужасный вопрос

чо та функция перестала работать... вернее форма какая та "пустая" вылазит... никак не пойму в чем дело

function q1(){
      $query = "SELECT DISTINCT IFNULL(post_5,post_6) FROM post order by 1";
        $result = mysql_query($query);
        $text = '<FORM class="form-common" name="q1" action="/hudaev/" method="GET">';
        $text .= '<INPUT type="hidden" name="action" value="q2">';
        $text .= '<SELECT class="page_INPUT" style="WIDTH: 100%" name="x">';
        $text .= '<OPTION value="Регион не выбран" selected>Выбирите регион</OPTION>';
            while($row = mysql_fetch_array($result)){
            $text .= '<OPTION value="'.$row["post_5"].'">'.$row["post_5"].'</OPTION>';
            }
        $text .= '</SELECT>';
        $text .= '<INPUT class="page_INPUT" style="FONT: bold 8pt Verdana, Arial; COLOR: #555555" type="submit" value="Показать">';
        $text .= '</FORM>';
        $text .= print_r($_GET);  // для проверки
    return $text;
}

как будта бы в $row["post_5"] ничо нету

хоя если выполнять SELECT DISTINCT IFNULL(post_5,post_6) FROM post order by 1 в окошке SQL запроса то все окей...

Отредактированно vladimirov (05.02.2008 17:05:58)

Неактивен

 

#8 05.02.2008 18:12:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ну вот опять подготовил ужасный вопрос

order by 1 - сортировка по первому столбцу.

Сделайте

SELECT DISTINCT IFNULL(post_5,post_6) AS col FROM post order by 1

и

$row['col']

Неактивен

 

#9 05.02.2008 18:42:02

vladimirov
Завсегдатай
Зарегистрирован: 16.12.2007
Сообщений: 69

Re: ну вот опять подготовил ужасный вопрос

ок. заработало. получилось вот что...

function q1(){
//      $query = "SELECT DISTINCT IFNULL(post_5,post_6) FROM post order by 1";
      $query = "SELECT DISTINCT IFNULL(post_5,post_6) AS col FROM post order by 1";
        $result = mysql_query($query);
        $text = '<FORM class="form-common" name="q1" action="/hudaev/" method="GET">';
        $text .= '<INPUT type="hidden" name="action" value="q2">';
        $text .= '<SELECT class="page_INPUT" style="WIDTH: 100%" name="x">';
        $text .= '<OPTION value="Регион не выбран" selected>Выбирите регион</OPTION>';
            while($row = mysql_fetch_array($result)){
            $text .= '<OPTION value="'.$row["col"].'">'.$row["col"].'</OPTION>';
            }
        $text .= '</SELECT>';
        $text .= '<INPUT class="page_INPUT" style="FONT: bold 8pt Verdana, Arial; COLOR: #555555" type="submit" value="Показать">';
        $text .= '</FORM>';
    return $text;
}

результат клика передается на другую функцию... а там уже посложнее sad

function q2($x){
$x = $_GET["x"];
$query = "SELECT DISTINCT post_7 FROM post WHERE post_5='".$x."' order by post_7 asc";
        $result = mysql_query($query);
        $text = '<FORM class="form-common" name="q2" action="/hudaev/" method="GET">';
        $text .= '<INPUT type="hidden" name="action" value="q3">';
        $text .= '<SELECT class="page_INPUT" style="WIDTH: 100%" name="x">';
        $text .= '<OPTION value="'.$x.'" selected>'.$x.'</OPTION>';
        $text .= '</SELECT>';
        $text .= '<SELECT class="page_INPUT" style="WIDTH: 100%" name="y">';
        $text .= '<OPTION value="Район не выбран" selected>Выбирите район</OPTION>';
            while($row = mysql_fetch_array($result)){
        $text .= '<OPTION value="'.$row["col"].'">'.$row["col"].'</OPTION>';
            }
        $text .= '</SELECT>';
        $text .= '<INPUT class="page_INPUT" style="FONT: bold 8pt Verdana, Arial; COLOR: #555555" type="submit" value="Показать">';
        $text .= '</FORM>';
    return $text;
}

опробовал вот это
SELECT DISTINCT post_7 FROM post WHERE post_5='".$x."' order by post_7 asc";
заменить на
SELECT DISTINCT IFNULL(post_7,post_8) AS col FROM post WHERE post_5='".$x."' order by 1
но тут тоже тупик. вроде работает... но точно знаю что неправильно работает...
т.к. WHERE post_5='".$x."' - неправильно будет. откуда там post_5 возмется...
раз уж селект был SELECT DISTINCT IFNULL(post_7,post_8) AS col ...
и потом помоему неправиль использовать только post_5
раз уж в первой функции было SELECT DISTINCT IFNULL(post_5,post_6) AS col ...

пробую яндексовать - но там только простые манипуляции с БДsad

paulus помогите
я так понял мне надо WHERE post_5='".$x."' переделать во что то типа WHERE post_5 или post_6 равно $x

Отредактированно vladimirov (05.02.2008 19:06:41)

Неактивен

 

#10 05.02.2008 20:51:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: ну вот опять подготовил ужасный вопрос

Конструкция вида "IFNULL(c1,c2) AS c3" означает буквально следующее:
"Если c1 является NULL, то выбрать c2 и назвать ее c3, иначе выбрать c1 и назвать ее c3".

Поэтому во втором <option> у Вас не работает - Вы не правильно назвали колонку ("col", а
надо было так, как написано в запросе - "post_7").

Переделать where - в соответствии с правилами английского языка и логики smile

WHERE post_5="'.$x.'" OR post_6="'.$x.'"

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson