2013-06-15 2 views
0

Мне нужно выбрать все из базы данных, когда «main = 1» один раз, затем выбрать все из базы данных при «main = 0» и использовать их в том же запросе. Могу ли я сделать это по одному запросу? это является просьбаphp - MySql выбрать из таблицы с несколькими условиями

1.

$result = $apt->query("SELECT * FROM cat where main='0'"); 

while($row=$apt->dbarray($result)){ 

@extract($row); 

2.

$result = $apt->query("SELECT * FROM cat where main='1'"); 

while($row=$apt->dbarray($result)){ 

@extract($row); 

I рода нужно объединить их в одном запросе, потому что это сделает конфликт, когда делать 2 запроса. Благодаря

+0

вы можете создать функцию, где вы можете передать значение условного параметра «главный» –

ответ

2

У вас есть несколько вариантов

SELECT * from cat where main = '0' or main ='1'; 

или

SELECT * from cat where main in ('0','1'); 

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

Вот пример того, как вы можете использовать указанные выше запросы для эмуляции кода, который вы указали, но делающего это в одном запросе.

$result = $apt->query("SELECT * FROM cat where main='0' or main = '1' order by main"); 
    while($row=$apt->dbarray($result)){ 
     @extract($row); 
     switch ($main){ 
      case 0: 
       // do stuff for when main = 0 
       break; 
      case 1: 
       // do stuff for when main = 1 
       break; 
     } 
    } 
+0

Благодарим Вас за повтор, но мне нужно используйте main как 1 один раз, затем используйте его как 0 один раз в рамках одного запроса. Любая помощь? – user2044626

+0

похоже, что это то, что вы делаете в своем вопросе. Вы, кажется, боитесь какого-то конфликта ... можете ли вы описать ситуацию, в которой возник бы такой конфликт? – Orangepill

1

1) Создайте 1 массив и вставьте результат внутри этого массива.

$array = array(); 
$result = $apt->query("SELECT * cat where main='0'"); 

while($row=$apt->dbarray($result)){ 
    $array['main0'][] = $row[]; 
} 

$result = $apt->query("SELECT * cat where main='1'"); 

while($row=$apt->dbarray($result)){ 
    $array['main1'][] = $row[]; 
} 

echo json_encode($array); 

2) ИЛИ вы можете использовать 1 запрос с IN

$result = $apt->query("SELECT * cat where main IN ('0','1')"); 

while($row=$apt->dbarray($result)){ 
    $array['main0'][] = $row[]; 
} 
Смежные вопросы