2013-11-23 2 views
0

Я передаю три параметра по адресу: &p1=eventID, &p2=firstItem, &p3=numberOfItems. Первый параметр - столбец таблицы. второй параметр - это первый элемент, который я ищу. Третий параметр указывает, сколько предметов после firstItem.SQL, как выбрать часть списка элементов через предложения SELECT, WHERE?

например, в первом запросе пользователя отправить &p1=1, &p2=0, &p3=20. Поэтому мне нужно сначала 20 пунктов списка. В следующий раз, если пользователь отправит &p1=1, &p2=21, &p3=20, тогда я должен передать второй 20 пунктов (из пункта 21 в пункт 41).

PHP-файл может получать параметры. В настоящее время я использую следующую строку для запроса в базу данных:

public function getPlaceList($eventId, $firstItem, $numberOfItems) { 
     $records = array(); 
     $query = "select * from {$this->TB_ACT_PLACES} where eventid={$eventId}"; 

     ... 
} 

Результат - это длинный список предметов. Если я добавлю LIMIT 20 в конце строки, то, поскольку я не использую токен, результат всегда будет таким же.

Как изменить запрос таким образом, который соответствует моим требованиям? любое предложение будет оценено по достоинству. Благодаря

=>обновление: я могу получить весь список элементов, а затем выбрать из моего первого пункта к последнему пункту с помощью for(;;) цикла. Но я хочу знать, можно ли делать подобное через sql? Думаю, этот способ более эффективный.

+0

возможно дубликат http://stackoverflow.com/questions/11728704/use-limit-to-paginate-results-in-mysql-query – DragonZero

+0

Спасибо, я просто посмотрел, но я думаю, что это решение основано на разбиении на страницы, что я его не использую. – Hesam

+0

ahh, gotcha, см. Эту ссылку, инструкции по использованию второго аргумента с ключевым словом limit. http://stackoverflow.com/questions/15950871/select-all-records-using-mysql-limit-and-offset-query – DragonZero

ответ

0

Я нашел ответ здесь: stackoverflow.com/a/8242764/513413

Для справки другой, я изменил мой запрос основывается на том, что Джоэл и выше ссылки сказал:

$query = "select places.title, places.summary, places.description, places.year, places.date from places where places.eventid = $eventId order by places.date limit $numberOfItems offset $firstItem"; 
0

Если вы используете mysql, используйте ключевое слово LIMIT.

SELECT * 
FROM Table 
LIMIT $firstItem, $numberOfItems 

Смотри документацию here (поиск LIMIT на странице).

1

Я хотел бы построить окончательный запрос будет следующим образом:

SELECT <column list> /* never use "select *" in production! */ 
FROM Table 
WHERE p1ColumnName >= p2FirstItem 
ORDER BY p1ColumnName 
LIMIT p3NumberOfItems 

ORDER BY важно; согласно моему чтению documentation, PostGreSql не гарантирует, какие строки вы получите без него. Я знаю, что Sql Server работает так же.

Помимо этого, я не уверен, как построить этот запрос безопасно. Вам нужно быть очень осторожным, что ваш метод для создания этого SQL-запроса не оставляет вас уязвимым для SQL-инъекций. На первый взгляд, похоже, что я могу очень легко поместить вредоносное значение в ваш параметр url name name.

+0

+1, спасибо Джоэл за вашу ценную информацию. Хотя это был не мой прямой ответ, я счел это ценным, так как это моя первая попытка изучить SQL. Я нашел свой ответ здесь: http://stackoverflow.com/a/8242764/513413 – Hesam

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

  • Нет связанных вопросов^_^