2014-01-24 3 views
0

мне было интересно, можно ли выбрать другие результаты из колонки, что другие столбцы:Как выбрать другие результаты, соответствующие столбцу, который содержит другие столбцы?

public function SameCars() { 
    $q = "select * from carads where STATUS='1' and DEL='0' and ADID=".$_REQUEST['carID']; 
    $result = $this->QueryResult($q); 
    $myprice = intval($result[0]->PRICE); 
    $body = $result[0]->BODY; 
    $pricelow = $myprice - (30/100 * $myprice); 
    $pricehigh = $myprice + (30/100 * $myprice); 
    $myyear= $result[0]->YEAR; 
    $currentyear = date('Y'); 
    $yearlow = $myyear - 5; 
    if ($yearhigh <= $currentyear-3) { 
    $yearhigh = $myyear + 5; 
    } else { $yearhigh = $myyear; } 
    $samecars = $this->QueryResult("SELECT * FROM carads where BODY LIKE '$body' AND STATUS='1' AND YEAR BETWEEN $yearlow and $yearhigh and DEL='0' and TITLE !='' and TITLE !='-1' and IMAGE1 != '' and IMAGE1 != '-1' and PRICE BETWEEN $pricelow and $pricehigh LIMIT 0,3"); 
    $i=0; 
    if (count($samecars)) { 
     foreach ($samecars as $samecar) {$i++; 
     if($i==3) $cls="news-row last"; else $cls="news-row"; 
     echo '<div class="'.$cls.'"> 
        <div class="img"><a href="'.$base_path.'detail-page_'.$samecar->ADID.'.html">'; 

        if($samecar->IMAGE1!='' && !empty($samecar)) 
        echo '<img src="'.$samecar->IMAGE1.'" alt="" height="79" width="89" />'; 
        else echo '<img src="'.$base_path.'uploads/no-img.jpg" height="79" width="89"/>'; 
        echo '</a></div> 
        <div class="details"> 
        <h5><a href="'.$base_path.'detail-page_'.$samecar->ADID.'.html">'.$samecar->TITLE.'</a></h5> 
        <div class="descn">"'.$this->FckContentView($this->closetags(substr($samecar->DESCRIPT, 0,50))).'</div> 
        </div> 
       </div>'; 
     } 
    } 
} 

$make Я хочу, чтобы иметь 60% значение по сравнению с другими критериями.

Как, например, в этом запросе будет отображаться список из 3 больших пальцев с первыми 3 автомобилями из MAKE «BMW» из базы данных, соответствующей этим критериям. И я хотел бы выпустить 3 больших пальца; 2 больших пальца от BMW и 1 от другого автомобиля, который близок к критериям, но отличается MAKE.

+0

Всегда создавайте свой код перед его помещением ... –

+0

Вы хотите, чтобы ваше предложение 'WHERE' было' OR' вместо 'AND'? – RedFilter

+0

Я пробовал подгонять его. Отступ как в php? – user3140607

ответ

1
SELECT * FROM carads 
WHERE BODY LIKE '$body' 
AND MAKE = '$make' 
AND STATUS='1' 
AND YEAR BETWEEN $yearlow and $yearhigh 
AND DEL='0' 
AND TITLE !='' 
AND TITLE !='-1' 
AND IMAGE1 != '' 
AND IMAGE1 != '-1' 
AND PRICE BETWEEN $pricelow and $pricehigh LIMIT 0,2 

Затем запустить второй запрос с

SELECT * FROM carads 
WHERE BODY LIKE '$body' 
AND MAKE <> '$make' 
AND STATUS='1' 
AND YEAR BETWEEN $yearlow and $yearhigh 
AND DEL='0' 
AND TITLE !='' 
AND TITLE !='-1' 
AND IMAGE1 != '' 
AND IMAGE1 != '-1' 
AND PRICE BETWEEN $pricelow and $pricehigh LIMIT 0,1 

Чтобы попытаться сделать это с помощью одного запроса возможно, но так грязно, что я бы рекомендовал 2 запросов - лимиты будут делать, что вы не ставите чрезмерная нагрузка на вашу базу данных

+0

Да, что-то вроде этого. Но мне нужно изменить свой php-код Как добавить новую переменную? – user3140607

+0

2 отдельных вызова базы данных, а не возврат одного набора результатов с помощью объединения? Эти два условия 'и' в одном и том же поле должны быть преобразованы в' not in() '. – Dan

+0

Да, но у вас есть проблема с разделом 60:40, тогда - если вы можете написать действительный запрос mysql, который работает, сделайте это, как мне бы хотелось его увидеть, но когда я возился, раскол 60:40 по результатам означал, что мой запрос был что долго и неуправляемо, что 2 вызова казались лучше. –

Смежные вопросы