PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 9
usemind Отправлено: 15 Декабря, 2014 - 17:15:16 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Мб, кому пригодится. Решил проблему следующим образом:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //Мб, кому пригодится. Решил проблему следующим образом:
  3.  
  4.  
  5. //ON while
  6. $i = 0;
  7. while ($i <= 9){
  8. $db     = JFactory::getDBO();
  9. $query = 'SELECT id FROM #__content WHERE state=1 AND id < "'.$id.'" AND catid IN(1,2,3) ORDER BY id DESC LIMIT 1';
  10. $db->setQuery($query);
  11. $rows = $db->loadObjectList();
  12.  
  13. foreach ( $rows as $row )
  14. {
  15. $id_less = $row->id;
  16. }
  17.  
  18. //подкл к базе и выборка
  19. $query = 'SELECT * FROM #__content WHERE state=1 AND id = "'.$id_less.'" LIMIT 1';
  20. $db->setQuery($query);
  21. $rows = $db->loadObjectList();
  22.  
  23. foreach ( $rows as $row )
  24. {
  25. $id_content = $row->id;
  26. //etc
  27. }
  28.  
  29. //если id последнего материала, который извлекаем больше 1, то продолжаем выборку, если нет, то заканчиваем цикл хитрым способом
  30. // получается, что мы каждый раз узнаем id, который меньше из нужной категории и присваиваем его для id_less вконце
  31. // и снова узнавая id, который меньше из нужной категории, мы получаем необходимый нам id
  32. if ($id_less > 1)
  33. {$id = $id_less;
  34. $i++;}
  35. else {$i=10;}
  36.  
  37. }//OFF while
  38. ?>
usemind Отправлено: 26 Октября, 2014 - 20:28:33 • Тема: Opera Mini, Mozilla и кириллические URL • Форум: Кодировки и все смежное

Ответов: 1
Просмотров: 1179
Здравствуйте. Сразу прошу прощения, мб не та тема.
В логах ошибки 404 своего сайта часто встречаю нечто:

2014-10-25 18:12:03 | IP: 9-.1-.5-.1-- | Br: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36 OPR/25.0.1614.50
Rf: http://site[dot]org/Программы/category/1

2014-10-26 14:33:38 | IP: 1--.-6.1--.2- | Br: Opera/9.80 (Series 60; Opera Mini/7.1.32444/35.5125; U; ru) Presto/2.8.119 Version/11.10
Rf: http://site.org/Видео

такие кракозябры также бывают с Apple Webkit и Safari, если моя память не ходит «налево».
т.е., как я понимаю Опера мини (и etc.) НЕ работает с кириллическими URL.

подскажите как че быть, где посмотреть как конвертить ссылки перед отдачей, типа %20%10 ... ?
usemind Отправлено: 18 Октября, 2014 - 21:00:16 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
эх
usemind Отправлено: 17 Октября, 2014 - 22:47:06 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Да, то, что нужно. Мне получается нужно выбрать 10 материалов, ID у которых меньше 400 (например) и принадлежащие к категории 1, после чего записать все эти 10 ID полученных материалов в переменные и из них выгрести то, что требуется... Но как это сделать? Оо
usemind Отправлено: 17 Октября, 2014 - 19:54:05 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Смотрю по нажатию на кнопку Показать еще. Динамическая подгрузка материалов через AJAX.
Да, выводит все записи, когда добавил Ваш код. Почему тогда через AJAX этого не видно и выходит только 1 Оо.
Сделал порядок DESC и LIMIT 1, так как пока только по одному все-равно выводит...
____
UPD:
Логика:
я получаю через AJAX - ID последнего материала на странице.
Нажимаю на кнопку Показать еще и мне должны выводится материалы с ID меньшим чем последний на странице и принадлежащий к конкретной категории..
usemind Отправлено: 17 Октября, 2014 - 19:24:25 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Да, как Вы указываете работает все четко. Материал выводится только один - вот в чем беда.
В том то и дело, что мне нужно сразу подгружать ну хотя бы 3-10...
Т.е. тут без цикла никак... А если цикл, то уменьшая ID на 1 я ничего не добиваюсь... Вот и головоломка как узнать 10 ID предыдущих от 400-того, у которых категория == 1. Жумла, конечно, хорошая CMS, но с ней сложно работать...
Мне нужно переделать саму логику цикла, но я не понимаю как, к сож. в PHP не ас, поэтому сюда и написал.
usemind Отправлено: 17 Октября, 2014 - 16:58:36 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Попробую...
(Добавление)
Дело в том, что эффект тот же, что и при проверке принадлежания к конкретной категории. Получается у меня само условие цикла не правильно.
$i = 0;
while ($i <= 10){
...
$i++;
}
в этом случае, как ни крути, цикл делается только 10 раз и если категория не 1, то ничего не выводится.
Т.е. если ID 399 не принадлежит категории 1, то цикл пропускает его, переходит к следующему ID 398, который принадлежит, например 1, выводит её, затем снова $i увеличивается, а $id уменьшается на 1..
Попробую сделать проверку для цикла Оо. пц эта логика жестокая штука)))
Попробовал - фигня...
usemind Отправлено: 17 Октября, 2014 - 15:08:58 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
melomaniac пишет:
DISTINCT ?

Попробовал - не помогло.
У меня получается так.
Например ID последнего материала 400. Мне нужно вывести материалы, у которых ID меньше 400, но принадлежат они к категории (catid) 1, например.
Т.е. получается у меня как-то не так написан сам цикл.
По логике, если последний ID 400, то предыдущий ID этой категории должен быть 399, но у этого 399 может быть другая категория, поэтому мне выводит содержимое с ID 400.
Т.е. мне надо как-то иначе узнавать, например, предыдущие 10 ID из категории 1, но как это сделать я не знаю.
Например, у последнего ID 400, а мне нужно вывести 10 предыдущих, а ID у них могут быть 397, 390, 350 и т.п.
Короче уже запутано получается. Подскажите как узнать сколько записей (и как их записать в цикле) в базе есть с категорией 1, ID которых меньше 400?

___
Я частично решил проблему, но криво. Поставил проверку на принадлежность категории 1, но если материалы имеют ID 250, а последний - 400, то мне выведется только 1 материал и то не факт, в зависимости от того, сколько итераций цикла выставил *(
usemind Отправлено: 15 Октября, 2014 - 22:24:50 • Тема: Выборка из БД • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 165
Здравствуйте.
Делаю выборку из БД с несколькими значениями.
Есть материал в Joomla, например его ID = 400. Мне нужно выбрать все материалы, которые ниже 400 (т.е. 399, 398...) и лежат в catid с несколькими значениями, а также показать их как мне нужно... catid у каждого материала свой и не дублируется.
т.е. например, материал с id 400 имеет catid 1, но нет его в 2 или 3...


PHP:
скопировать код в буфер обмена
  1. $id = 400; //например ID 400
  2. //ON while
  3. $i = 0;
  4. while ( $i <= 10){
  5.  
  6. //подкл к базе и выборка
  7. $db     = JFactory::getDBO();
  8. $query = 'SELECT * FROM #__content WHERE state=1 AND id = "'.$id.'" AND catid IN (1, 2, 3) ORDER BY id ASC';
  9. $db->setQuery($query);
  10. $rows = $db->loadObjectList();
  11.  
  12.  
  13. //тут выводим инфу...
  14.  
  15.  
  16. $i++; //увеличивает счетчик на 1
  17. $id--; //уменьшаем ID на 1
  18. }
  19. //OFF while


У меня все работает, но выборка идет не так как хочется, а именно выводятся материалы с одним и тем же ID несколько раз, хотя в БД все прописано правильно и запрос тоже правильный.
Так вот. как проверить цикл, чтобы он не выводил повторяющиеся ID несколько раз?

Да, еще хотелось бы добавить, что ID, принадлежащие конкретной catid могут идти не подряд, например id материала 400, а предыдущий - 387...

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB