2013-07-31 2 views
-1

Я создаю веб-приложение ajax, и я показываю цепочку выбора в jquery, которая делает некоторые выбор за кулисами и экономит много времени, набирая новые маршруты и представления. Однако мне бы хотелось, чтобы узнать, есть ли способ уменьшить мою работу, не создавая новых моделей.Пропустить некоторые столбцы при выборе

У меня есть этот controller

<?php 
class Tools extends CI_Controller { 

    public function message($to = 'World') 
    { 
     echo "Hello {$to}!".PHP_EOL; 
    } 
    public function boom(){ 
    echo "boom".PHP_EOL; 
    } 
    public function q(){ 
    $sql = "SELECT * FROM members WHERE member_id = ? AND member_club_id = ? AND membership_year = ?"; 

    $count = $this->db->query($sql, array(null, 1, null)); 
    foreach ($count->result() as $row) 
    { 
    echo $row->member_name . PHP_EOL; 
    } 
    } 
} 
?> 

который является попытка пропустить некоторые колонки и отображения какой-либо другой.

Это его эквивалент SQL

SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null; 

Они оба не показывают anything.Is ли способ я могу пропустить колонну моего выбора ?.

+0

Это не совсем понятно, «пропуская колонну», что вы имеете в виду? Измените 'SELECT *' для 'SELECT column1, column2'? –

+1

SELECT thiscolumn, thatcolumn FROM table; – Anigel

+0

Просто скажите имена столбцов вместо *, и он будет работать. – Jonast92

ответ

0

Это действительно странно или нет

SELECT * FROM members WHERE member_id = (select member_id) AND member_club_id = 1 AND membership_year = (select membership_year); 

и

SELECT * FROM members WHERE member_id = (select member_id) AND member_club_id = (select member_club_id=1) AND membership_year = (select membership_year); 

Оба запросы работают.

1

Вы можете явно указать, какие столбцы возвращаются как этот

SELECT id, member_name FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null; 

Если вы на самом деле означает «пропустить строки» вы можете использовать LIMIT

SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null LIMIT 5, 5; 

Это возвращает все столбцы для строк 6, 7 , 8, 9 и 10

+0

Нулевые строки, возвращаемые в 'SELECT * FROM members WHERE member_id = null AND member_club_id = 1 AND membership_year = null LIMIT 5, 5;' –

1

Вы хотите пропустить столбцы в той части заявления?

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

  • столбца = нуль ложен независимо от значения столбца
  • колонок <> нулевых также ложно независимо от значения столбца

Если вы действительно не хотите, чтобы изменить генерацию запросов, вы могли бы использовать что-то вроде этого:

SELECT * FROM members 
WHERE (? is null OR member_id = ?) 
    AND (? is null OR member_club_id = ?) 
    AND (? is null OR membership_year = ?) 

Однако я не рекомендую это, потому что у механизма базы данных возникнут проблемы с поиском хорошего индекса для решения запроса с помощью такого утверждения. Моим предпочтительным решением было бы динамическое создание SQL на основе полученных аргументов. Условия будут вставлены только в том случае, если значение не равно нулю.

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