PHP.SU

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

Страниц (9): [1] 2 3 4 5 6 7 8 9 »

> Найдено сообщений: 134
ugin_root Отправлено: 01 Июня, 2018 - 06:05:54 • Тема: Нужно вывести 2 самых популярных заказа для каждой позиции • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 51
Пока что сделал так, но это прям костыль
CODE (SQL):
скопировать код в буфер обмена
  1. SET @restaurant_id := NULL;
  2. SET @iterator := NULL;
  3. SELECT
  4.         restaurant.id,
  5.         restaurant.`name`,
  6.         dish.id AS dish_id,
  7.         dish.`name`,
  8.         t.count,
  9.         t.iterator
  10. FROM restaurant
  11.         INNER JOIN dish ON dish.restaurant_id = restaurant.id
  12.         INNER JOIN (
  13.                 SELECT t.*
  14.                 FROM(
  15.                         SELECT
  16.                                 @iterator := IF(@restaurant_id = t.restaurant_id, @iterator + 1, 0) AS iterator,
  17.                                 @restaurant_id := t.restaurant_id AS restaurant_id,
  18.                                 t.id,
  19.                                 t.count
  20.                         FROM (
  21.                                 SELECT dish.id, dish.restaurant_id, COUNT(*) AS count
  22.                                 FROM dish
  23.                                         INNER JOIN purchase ON purchase.dish_id = dish.id
  24.                                 WHERE YEAR(purchase.date_purchase) = YEAR(NOW())
  25.                                 GROUP BY dish.id
  26.                                 ORDER BY dish.restaurant_id ASC, count DESC
  27.                         ) AS t
  28.                 ) AS t
  29.                 HAVING t.iterator <= 3
  30.         ) AS t ON t.id = dish.id
  31. ORDER BY restaurant.id ASC, t.iterator
  32.  
ugin_root Отправлено: 30 Мая, 2018 - 13:46:43 • Тема: Нужно вывести 2 самых популярных заказа для каждой позиции • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 51
Итак есть 3 таблицы:

    Ресторан (restaurant)
    Блюдо (dish)
    Заказ (purchase)

Нужно вывести все рестораны и 2 самых популярных блюда к каждому ресторану. По идее этот запрос должен вывести всё так как положено:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3.         restaurant.id,
  4.         restaurant.`name`,
  5.         dish.`name`
  6. FROM
  7.         restaurant
  8.                 INNER JOIN dish ON dish.restaurant_id = restaurant.id
  9. WHERE dish.id IN (
  10.         SELECT t.id
  11.         FROM (
  12.                 SELECT dish.id, dish.restaurant_id, COUNT(*) AS count
  13.                 FROM dish
  14.                         INNER JOIN purchase ON purchase.dish_id = dish.id
  15.                 GROUP BY dish.id
  16.         ) AS t
  17.         WHERE t.restaurant_id = restaurant.id
  18.         LIMIT 2
  19. )
  20. GROUP BY dish.id
  21.  


Но mysql ругается:
Цитата:
[Err] 1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'


С помощью JOIN это не получилось решить. Какие есть идеи как это сделать?
ugin_root Отправлено: 04 Мая, 2017 - 17:20:50 • Тема: Обработка кнопки • Форум: HTTP и PHP

Ответов: 1
Просмотров: 730
PHP:
скопировать код в буфер обмена
  1. $sort_tag=1;
  2. if (isset($_POST['sort_type']) & $sort_tag=1){
  3.         $res = mysql_query(" SELECT * FROM `table_name` ORDER BY `cell_name` ASC");
  4.         $sort_tag=0;
  5. } elseif (isset($_POST['sort_type']) & $sort_tag=0) {
  6.         $res = mysql_query(" SELECT * FROM `table_name` ORDER BY `cell_name` DESC");
  7.         $sort_tag=1;
  8. }


Вместо `cell_name` вставьте имя ячейки по которой хотите отсортировать результат, вместо `table_name` имя таблицы
ugin_root Отправлено: 13 Января, 2014 - 11:33:43 • Тема: Как проставить ссылке псевдокласс :visited? • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 1328
IllusionMH
сделал вариант с localstore, но всё ещё интересно есть ли способ "пометить" ссылку псевдоклассом который браузер будит запоминать, без костылей вроде iframe
ugin_root Отправлено: 13 Января, 2014 - 11:08:07 • Тема: Как проставить ссылке псевдокласс :visited? • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 1328
Мелкий
Да я знаю, что на пару лет хватит, интересно сколько эти пять мегабайт будут парситься со временем.
А вообще мне очень интересно знать, можно ли так сделать (ссылки и :visited).
ugin_root Отправлено: 13 Января, 2014 - 10:47:06 • Тема: Как проставить ссылке псевдокласс :visited? • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 1328
caballero
Ну насчёт сколько прочитает сложно сказать, за месяц может тысяча, их в основном не читают, а просто просматривают журналисты, что-бы быть в курсе событий (работаю в новостном агенстве).
На счёт куки и хранения в БД это самая первая моя мысль, но это метод для нелинивых. А я очень ленивый и хочу сделать всё в 2 строчки кода, в первой проставлять параметр :visited, а во второй прописать стили для посещённых. Это было-бы идеальным вариантом, просто я способа не могу придумать лучше чем загружать страницу в iframe... И думал может кто-то знает как сделать подобный фокус со ссылками или может есть такое свойство (или псевдокласс), у ссылок, которое можно программно изменять.
ugin_root Отправлено: 13 Января, 2014 - 10:08:06 • Тема: Как проставить ссылке псевдокласс :visited? • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 1328
Ситуация следующая, есть сайт на котором очень много новостей и нужно каким-то образом запоминать что новость прочитана. Весь сайт написан на JS и новость считается прочитанной, после того как её развернули (как спойлер), т.е. страница с новостью не открывается и не перезагружается. Из-за этого не получается проставить стиль для новостей которые уже были прочитаны по псевдокласcу :visited. Регистрации нет (и не будит). Хранить эту информацию в куках или локальном хранилище не вариант, слишком много новостей. Есть ли такой псевдокласс который можно будит изменять программно? По тому что :visited менять и читать нельзя. Есть мысль на счёт того что-бы открывать программно нужную ссылку в iframe и тогда браузер сам проставит параметр :visited, но это как-то очень некрасиво, да и если нужна будит функция пометить все как прочитанные то грузить в iframe ~50000 новостей вообще не вариант.
ugin_root Отправлено: 16 Октября, 2013 - 16:59:52 • Тема: Удаляется не то что надо • Форум: Вопросы новичков

Ответов: 3
Просмотров: 157
Атрибут name должен изменяться у каждого элемента формы иначе он переопределяется
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. echo '
  3.         <td style="text-align:center;">
  4.                 <form action="?delete">
  5.                         <input type="hidden" name="name" value="'.$name.'"/>
  6.                         <input type="hidden" name="price" value="'.$price.'"/>
  7.                         <input type="hidden" name="id" value="'.$id.'"/>
  8.                         <input type="text" name="count" value="'.$count.'"/>
  9.                         <input type="submit" value="Удалить"/>
  10.                 </form>
  11.         </td>
  12. ';


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(isset($_GET['delete'])){
  3.         unset ($_SESSION['products'][$_GET['delete']]);
  4. }
ugin_root Отправлено: 15 Октября, 2013 - 17:43:04 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
если у тебя там внутри сессии хранятся то нужны права на чтение и запись для пользователя под которым запускается процесс php! а у тебя там только суперпользователь может читать и записывать "-rw-------" а php по дефолту запускается не от имени суперпользователя

Хотя с другой стороны счётчик обычный у тебя работает, но это может быть связано с тем что в mysql.inc изменяется стандартная папка для хранения файлов сессий (session.save_path)
ugin_root Отправлено: 15 Октября, 2013 - 14:31:23 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
И всё таки придётся смотреть логи. Ищи всё что связано с функцией session_start();

Две самых распространённых ошибки это файлы в формате utf-8(нужен utf-8 без BOM) и скрипт не может записать сессию на диск (нету доступа или папка не существует)

Логи
CODE (htmlphp):
скопировать код в буфер обмена
  1. tail -f -n 50 /var/log/apache2/error.log


Правильная папка
CODE (htmlphp):
скопировать код в буфер обмена
  1. sudo mkdir /var/www/hms/data/mod-tmp

CODE (htmlphp):
скопировать код в буфер обмена
  1. sudo chmod a+rw /var/www/hms/data/mod-tmp
ugin_root Отправлено: 15 Октября, 2013 - 14:21:29 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
Ну тогда не echo $row, а print_r($row)
ugin_root Отправлено: 15 Октября, 2013 - 13:59:57 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
Посмотри что лежит в переменной $res может запрос не выполнился вовсе и произошла ошибка.

И немножко поменяй в коде что-бы знать что происходит во время подключения
PHP:
скопировать код в буфер обмена
  1. $res = mysql_query($query);
  2. if(!$res){
  3.         echo mysql_error();
  4.         exit();
  5. }else{
  6.         $row = mysql_fetch_assoc($res);
  7.         if($row){
  8.                 session_start();
  9.                 $_SESSION['id'] = $row['id'];
  10.                 $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  11.         }
  12.         header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  13. }


И мне кажется сервер никак не реагирует на твоё ini_set('display_errors',1);
Смотри логи в папке '/var/log/apache2/' туда сыпятся все ошибки и нотисы сервера

----------------
Для табличек в базе latin1 никогда не используй, намучаешься с крякозябрами, используй лучше utf-8
ugin_root Отправлено: 15 Октября, 2013 - 12:37:17 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
Посмотрите тот вариант который я прислал, там нету никакого return, я его убрал и условие поменял на обратное, что-бы сократить

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (!isset($_SESSION['id']) OR $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
  3.         ?>
  4.                 <form method="POST">
  5.                 <input type="text" name="login"><br>
  6.                 <input type="password" name="passwd"><br>
  7.                 <input type="submit"><br>
  8.                 </form>
  9.         <?PHP
  10.         exit();
  11. }
ugin_root Отправлено: 15 Октября, 2013 - 11:36:18 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
Да пробовал. У вас база данных есть? табличка users с полями uid, login, password? Если да то всё должно работать. Что происходит в mysql.inc? Где вы подключаетесь к БД?
ugin_root Отправлено: 15 Октября, 2013 - 07:41:28 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4274
перенеси exit() в последний блок else

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         ini_set('display_errors',1);
  3.         error_reporting(E_ALL);
  4.         include("mysql.inc");
  5.        
  6.        
  7.         if (isset($_POST['login'])){
  8.                 $login = mysql_real_escape_string($_POST['login']);
  9.                 $passwd = mysql_real_escape_string($_POST['passwd']);
  10.                 $query = "
  11.                         SELECT *
  12.                         FROM users
  13.                         WHERE login='$login' AND passwd='$passwd'
  14.                 ";
  15.                 $res = mysql_query($query) or trigger_error(mysql_error().$query);
  16.                 if ($row = mysql_fetch_assoc($res)){
  17.                         session_start();
  18.                         $_SESSION['id'] = $row['uid'];
  19.                         $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  20.                 }
  21.                 header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  22.                 exit();
  23.         }
  24.        
  25.        
  26.         else if (isset($_GET['action']) AND $_GET['action']=="logout"){
  27.                 session_start();
  28.                 session_unset();
  29.                 session_destroy();
  30.                 header("Location: http://".$_SERVER['HTTP_HOST']."/");
  31.                 exit();
  32.         }
  33.        
  34.        
  35.         else if (isset($_REQUEST[session_name()])){
  36.                 session_start();
  37.         }
  38.        
  39.        
  40.         if (!isset($_SESSION['id']) OR $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
  41.                 ?>
  42.                         <form method="POST">
  43.                         <input type="text" name="login"><br>
  44.                         <input type="password" name="passwd"><br>
  45.                         <input type="submit"><br>
  46.                         </form>
  47.                 <?PHP
  48.                 exit();
  49.         }

Страниц (9): [1] 2 3 4 5 6 7 8 9 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB