2013-06-14 2 views
0

Мне нужно написать инструкцию select, поскольку мы можем проанализировать столбцы для динамического запроса с использованием языка PHP.Можем ли мы динамически разбивать столбцы на оператор select mysql

У меня есть такой запрос.

SELECT `Pro_Csharp` + `Pro_Java` + `Pro_VBA` + `Pro_Cplus` + `Frameworks_Aspdotnet` + `Fram_MVCdotnet` + `Fram_WCF` + `Fram_Hibernate` + `Fram_Struts` + `Fram_Spring` + `Data_transformations_XML` + `Data_transformations_XSL` AS total_skill 
FROM wp_skilllist 
ORDER BY total_skill DESC 

С интерфейса пользователи могут выбрать тему, которую они хотят выбрать. Около 130 столбцов. Поэтому я хочу сэкономить его динамически. Есть ли способ сделать это?

Если мы не сможем сделать это с помощью mysql, и предложение об этом с использованием php-языка также очень полезно.

+0

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

+0

все в порядке с данными печати, проблема заключается в том, что пользователь может выбрать 'Pro_java' или не выбрать' Pro_Java'. Затем мы должны добавить его или удалить из выборочного оператора динамически. – wordpressm

+0

@menuwordpress, используете ли вы какие-либо флажки для выбора пользователем? Что вы используете в пользовательском интерфейсе для пользователя, чтобы выбрать эти элементы? –

ответ

3

Построить строку запроса динамически во время разбора ввод данных пользователем:

$sqlString = 'SELECT '; 
if ($userInput['csharp']) $fields[] = 'Pro_Csharp'; 
... 
$sqlString .= implode (' + ', $fields); 
$sqlString .= ' AS total_skill FROM...'; // rest of your query 
sendQueryWithDriverOfYourChoice($sqlQuery); 
1

Это может быть сделано.

Лучший способ сделать это зависит от того, собираетесь ли вы использовать параметризованные утверждения или нет. Поскольку вы новичок, было бы лучше, если бы оно было простым. Следующий псевдокод дает вам бесконечно расширяемый запрос. Если у вас есть только страница флажков с именами, равными именам ваших колонок, это будет работать. В противном случае вам нужно будет немного очистить массив.

$keys=array_keys($_POST); 
$sql="SELECT "; 
foreach($keys AS $thecolumn) 
    { 
    $sql.="`$thecolumn`+ "; 
    } 
$sql=substr($sql,0,strlen($sql)-2); //trim off last + 
$sql.=" AS total_skill FROM wp_skilllist ORDER BY total_skill DESC"; 
+0

Метод имплантов Яка более изящный, чем мой! –

+0

Опасайтесь, этот код открыт для [SQL injection] (http://xkcd.com/327/). – RandomSeed

+0

Аргать как ?? Я думал, что это безопасно - что я сделал не так? Я думал, что безопасно использовать только почтовые ключи, а не контент и использовать его на одном из моих сайтов - помогите! –

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