За последние 24 часа нас посетили 16680 программистов и 1651 робот. Сейчас ищут 1779 программистов ...

1 запрос в 2 таблицы + матчасть

Тема в разделе "MySQL", создана пользователем ArsNet, 6 дек 2016.

  1. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Да с UNION я разобрался. Теперь возник вопрос как вывести значения полученные в втором запросе.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как обычно. не понятно, что не понятно.
     
  3. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Не получается вывести значение полученое во втором запросе после UNION
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хреново, чо

    а как ты и что делаешь?
     
  5. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    PHP:
    1. <?
    2. include ("db.php");
    3.  
    4. $m = mysql_query("SELECT `id`, `51840`.`tmc`, `nametmc` FROM `51840` UNION SELECT sum(`kol`)`kol`, '', '' FROM `prihodfakt` JOIN `51840` on `51840`.`tmc` = `prihodfakt`.`tmc`");
    5.  
    6. ?>
    7. <table border=1>
    8. <tr>
    9. <td align=center>ID</td>
    10. <td align=center>ТМЦ</td>
    11. <td align=center>Наименование</td>
    12. <td align=center>Поступление</td>
    13. <td align=center>Оприходовано</td>
    14. <td align=center>Расход</td>
    15. </tr>
    16.  
    17. <?
    18. while ($r = mysql_fetch_array($m)){
    19. ?>
    20. <tr>
    21. <td align=center><? echo $r['id'] ?></td>
    22. <td align=center><? echo $r['tmc'] ?></td>
    23. <td align=center><? echo $r['nametmc'] ?></td>
    24. <td align=center><? echo $r['kol'] ?></td>
    25. <td align=center></td>
    26. <td align=center></td>
    27. </tr>
    28. <?
    29. }
    30. ?>
    31. </table>
    32. <?
    33. ?>
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    безумие какое-то. Ты два запроса объединил с какой вообще целью? Что вообще ты выбираешь первым запросом? Что вообще ты делаешь?
     
  7. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Первым запросом выбираем код ТМЦ наименование изделия и его id потом ищем в таблице расходфакт sum(kol) где `51840`.tmc = `rashodfakt`.`tmc`
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну сделай двумя запросами. так можно что угодно объединить в юнион, но объединяют одинаковые данные обычно, а не просто два не особо связанных запроса...
    --- Добавлено ---
    муть какая-то на картинке
     
  9. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Вот что надо в итоге получить минимизировав нагрузку на сервер SQL запросами.
     

    Вложения:

    • 1111.jpg
      1111.jpg
      Размер файла:
      202,8 КБ
      Просмотров:
      2
  10. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Вот и пытаюсь затолкать все в 1 запрос.
    --- Добавлено ---
    Почему муть? Ладно понятно. Чем могли тем помогли как говориться. Буду дальше себе мозг парить
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну дружище, ты пойми, два запроса это два запроса, даже если в одном :D

    UNION позволяет объединять запросы, т.е. их заведомо не один. То, что ты их разом послал не делает их легче.
     
  12. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Да это понятно. Дело в том что что он мне говорит мол $r['kol'] не существует. Я немного в затруднении мол как не существует то?
    --- Добавлено ---
    Таких строк как на картинке может быть до 1000 на странице и запускать расчеты в цикле по каждой строке не вареант. Вот и пытаюсь изобрести велосипед

    Если их не послать разом то прийдется засовывать подсчет по базам prihod, prihodfakt, rashod в цикл, а этой фу-фу-фу как плохо
     
    #37 ArsNet, 15 дек 2016
    Последнее редактирование: 15 дек 2016
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    var_dump() =)

    Эмм. Ты не понимаешь. У тебя в юнионе два запроса. Тебя это от цикла: раз - не спасёт, два - количество запросов не уменьшит. Тебе надо выбирать сначало одно по всем товарам, потом другое по всем товарам, потом в пхп с этими данными работать.

    Запрос в базу данных возвращает тебе таблицу. Подумай об этом.
     
  14. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    var_dump ($r['kol']) приводит к:
    Notice: Undefined index:kol in bla bla bla on line 36 NULL
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    var_dump($r)
     
  16. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    String (18) "0.79151596"

    Нафига мне такой вид?
    --- Добавлено ---
    4 таблицы. как их тогда вытащить и обработать я не догоняю. ну тупой я че поделать
     
  17. ArsNet

    ArsNet Новичок

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

    PHP:
    1. <?
    2. if (isset($_SESSION['login'])){  if ($_SESSION['login'] =='') { unset ($_SESSION['login']);}}
    3. if (isset($_SESSION['password'])){ if ($_SESSION['password'] =='') { unset ($_SESSION['password']);}}
    4. if (!isset($_SESSION['login']) or !isset($_SESSION['password'])){
    5. echo "<html><head><meta    http-equiv='Refresh' content='0;    URL=login.php?info=5'></head></html>";
    6. }
    7. if(isset($_POST['submit'])){
    8. if ($_POST['ty'] == 1){
    9. $tm = $_POST['z'];
    10. $resultishod = mysql_query ("SELECT `id`, `datepos`, `tmc`, `nametmc`, `edizm`, DATE_FORMAT(reg_date,'%d.%m.%Y') as regdate, `img` FROM `51850` WHERE '$tm'=`tmc` ORDER BY `id` DESC");
    11. $myrows = mysql_fetch_array($resultishod);
    12. }
    13. elseif($_POST['ty'] == 2){
    14. $tm = $_POST['z'];
    15. $resultishod = mysql_query ("SELECT `id`, `datepos`, `tmc`, `nametmc`, `edizm`, DATE_FORMAT(reg_date,'%d.%m.%Y') as regdate, `img` FROM `51850` WHERE `nametmc` LIKE '%$tm%' ORDER BY `id` DESC");
    16. $myrows = mysql_fetch_array($resultishod);
    17. }
    18. }
    19. elseif(!isset($_POST['submit'])){
    20. $resultishod = mysql_query ("SELECT `id`, `datepos`, `tmc`, `nametmc`, `edizm`, DATE_FORMAT(reg_date,'%d.%m.%Y') as regdate, `img` FROM `51850` ORDER BY `id` DESC");
    21. $myrows = mysql_fetch_array($resultishod);
    22. }
    23. ?>
    24.  
    25. <h3>Склад 51850</h3><hr>
    26. <form action="/main.php?page=51850" method="post" enctype="multipart/form-data">
    27. Искать по:
    28. <select name="ty">
    29. <option value="1">ТМЦ</option>
    30. <option value="2">Название</option>
    31. </select>
    32. &nbsp&nbsp&nbsp
    33. Значение:
    34. <input type="text" name="z">
    35. <input type="submit" name="submit" value="Искать">
    36. </form>
    37. <table width="100%" class="wp-table">
    38. <tr>
    39. <td class="name" align="center"> ID </td>
    40. <td class="name" align="center">Фото </td>
    41. <td class="name" align="center"> Дата внесения</td>
    42. <td class="name" align="center"> TMЦ </td>
    43. <td class="name" align="center"> Название ТМЦ </td>
    44. <td class="name" align="center"> ПКИ(факт.) </td>
    45. <td class="name" align="center"> ПКИ (опр.) </td>
    46. <td class="name" align="center"> ПКИ (выд.) </td>
    47. <td class="name" align="center"> ПКИ (ост.) </td>
    48. <td class="name" align="center"> ед. изм. </td>
    49. </tr>
    50. <?
    51. do{
    52. $res = mysql_query ("SELECT name FROM edkod WHERE '$myrows[edizm]' = `id`");
    53. $myres = mysql_fetch_array($res);
    54. $tmc = trim($myrows['tmc']);
    55. $aa = mysql_query("SELECT * FROM prihod WHERE '$tmc'=tmc");
    56. $bb = mysql_fetch_array($aa);    
    57.      
    58.         $b=0;
    59.         $n=0;
    60.         $s=0;
    61.         $rs=0;
    62. while($bb=mysql_fetch_array($aa)){
    63. $b=$b+$bb['kol'];
    64. $s=$s+$bb['rashod'];
    65. }    
    66.          
    67. $mm = mysql_query("SELECT * FROM prihodfakt WHERE '$tmc'=tmc");
    68. $nn = mysql_fetch_array($mm);
    69.      
    70. while($nn=mysql_fetch_array($mm)){
    71.  
    72.  
    73. $n=$n+$nn['kol'];
    74.  
    75. }            
    76.              
    77. $r = mysql_query("SELECT * FROM rashodfakt WHERE '$tmc'=tmc");
    78. while($rr = mysql_fetch_array($r)){
    79.  
    80.  
    81. $rs=$rs+$rr['kol'];
    82.  
    83. }    
    84.  
    85. $p = $n-$rs;    
    86. if ( $b > $n){
    87. $color2 ="#fe9191";
    88. $color1 ="#73a8f7";
    89. }
    90. if ( $b < $n){
    91.  
    92. $color2 ="#73a8f7";
    93. $color1 ="#fe9191";
    94. }
    95.  
    96. if ( $b == $n){
    97.  
    98.     $color2 ="#93ff96";
    99.     $color1 ="#93ff96";
    100. }
    101.          
    102.      
    103.         if ($p > 0)
    104.         {
    105.          
    106.             $col = "#c6f99d";
    107.          
    108.         }
    109.         if ($p == 0)
    110.         {
    111.          
    112.             $col = "#f17171";
    113.          
    114.         }
    115.         $im = $myrows['img'];
    116.      
    117.      
    118.         if (empty($im)){
    119.          
    120.          
    121.          
    122.             $img = '<img src=image/pki/nofoto.png width=75px height=75px>';
    123.          
    124.         }
    125.         else {
    126.          
    127.             $img = "<a rel='example_group' href='image/pki/".$im."'><img src='image/pki/".$im."' width='75px' height='75px'></a>";
    128.          
    129.         }    
    130.      
    131. echo "
    132. <tr>
    133. <td align=center class=name><font color=#fff><b>$myrows[id]</b></font></td>
    134. <td align=center class=cont height=75px width=75px>$img</td>
    135. <td align=center class=cont><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$myrows[regdate]</a></td>
    136. <td align=center class=cont><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$myrows[tmc]</a></td>
    137. <td align=center class=cont><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$myrows[nametmc]</a></td>
    138. <td align=center class=cont bgcolor=$color1><b><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$n</b></a></td>
    139. <td align=center class=cont bgcolor=$color2><b><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$b</b></a></td>
    140. <td align=center class=cont bgcolor=#e8851a><b><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$rs</b></a></td>
    141. <td align=center class=cont bgcolor=$col><b><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$p</b></a></td>
    142. <td align=center class=cont><a class=big href=main.php?page=fullsklad&tmc=$myrows[tmc]&sklad=51850>$myres[name]</a></td>
    143. </tr>";
    144.     }
    145. while ($myrows = mysql_fetch_array($resultishod));
    146. ?>
    147. </table>
     
    #42 ArsNet, 15 дек 2016
    Последнее редактирование модератором: 15 дек 2016
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    завязывай ты с этим шаманством

    ты б хоть мой пинпай взял, если тебе нормальные cms не в радость.

    инъекция


    тебе за это деньги платят?
     
  19. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Нет не платят :( как тогда ты представляешь проверку на существование сессии ? Защиту от прямого обращения к странице сайта?
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что вообще ты делаешь в этих двух строках? в первых
     
  21. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    1. Проверка на наличие ссесий. Если сессия пустая то она убивается.
    3. стройокой проверяем убита ли была ссесия или нет. Если убита то выкидываем с сайта на авторизацию
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет. ты хочешь это сделать. а что именно делаешь в этих строках опиши пожалуйста по командам, по отдельным словам в этих строках.

    что конкретно там происходит? и как именно выкидываем?
    --- Добавлено ---
    на всякий случай поясню, что раз я спрашиваю так, то я не считаю, что там ты делаешь то, что ты считаешь, что ты делаешь.
     
  23. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    ЧЕ за бред? и так же все написано:
    Если (существует($_SESSION['login'])){ если ($_SESSION['login'] =='ПУСТАЯ') { уничтожаем ($_SESSION['login']);}}
    тоже самое с password
    Если (не существует($_SESSION['login']) или не существует($_SESSION['password'])){
    перенаправляем на страницу login.php с переменной $_GET['info']
    echo "<html><head><meta http-equiv='Refresh' content='0; URL=login.php?info=5'></head></html>";
    exit;
    }
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я понимаю твоё возмущение от того, что по моему мнению, твои ожидания расходятся с реальностью. Это вообще единственная причина, почему люди раздражаются.
    да. там написано именно это и только это, и ничего нет про уничтожение сесси. Это раз.

    два. Нафига тебе вообще хранить в сессии пароль? И логин? =) Только ты не пыхти, а постарайся взвешенно проанализировать своё решение.

    и экзит тоже - плохо.
     
  25. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Для идентификации пользователя. И проверки в дальнейшем на соответствие данных. Подменяют id а тут херак и пароль с логином с сессией по id не совпадает.

    unset - разве не удаляет переменную?

    https://php.ru/manual/function.unset.html

    unset
    (PHP 4, PHP 5, PHP 7)

    unset — Удаляет переменную

    А exit то чего натворил что плохим стал?
    Надо прервать выполнение скрипта пишем exit.

    exit
    (PHP 4, PHP 5, PHP 7)

    exit — Выводит сообщение и прекращает выполнение текущего скрипта