Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите правильно составить запрос к БД
Форумы портала PHP.SU » » Вопросы новичков » Помогите правильно составить запрос к БД

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

1. elikmhs - 24 Июля, 2018 - 14:22:58 - перейти к сообщению
Допустим в базе есть таблица Сотрудники с полями имя, возраст и пол.
Требуется создать таблицу в цикле так чтобы каждое имя отображалась один раз а рядов вывести количество сотрудников с таким именем.

Таблица в БД

CODE (html):
скопировать код в буфер обмена
  1. <table width="786" border="1" cellspacing="0" cellpadding="10">
  2.   <tr>
  3.     <td>ИМЯ</td>
  4.     <td>ВОЗРАСТ</td>
  5.     <td>ПОЛ</td>
  6.   </tr>
  7.   <tr>
  8.     <td>Иван</td>
  9.     <td>30</td>
  10.     <td>М</td>
  11.   </tr>
  12.   <tr>
  13.     <td>Олег</td>
  14.     <td>19</td>
  15.     <td>М</td>
  16.   </tr>
  17.   <tr>
  18.     <td>Иван</td>
  19.     <td>35</td>
  20.     <td>М</td>
  21.   </tr>
  22.   <tr>
  23.     <td>Олег</td>
  24.     <td>20</td>
  25.     <td>М</td>
  26.   </tr>
  27.   <tr>
  28.     <td>Олег</td>
  29.     <td>40</td>
  30.     <td>М</td>
  31.   </tr>
  32.   <tr>
  33.     <td>Инна</td>
  34.     <td>20</td>
  35.     <td>Ж</td>
  36.   </tr></table>
  37.  


Требуется вывести
CODE (html):
скопировать код в буфер обмена
  1. <table width="500" border="1" cellspacing="0" cellpadding="10">
  2.   <tr>
  3.     <td>ИМЯ</td>
  4.     <td>КОЛ. СОТРУДНИКОВ</td>
  5.   </tr>
  6.   <tr>
  7.     <td>Иван</td>
  8.     <td>2 </td>
  9.   </tr>
  10.   <tr>
  11.     <td>Олег</td>
  12.     <td>3 </td>
  13.   </tr>
  14.   <tr>
  15.     <td>Инна</td>
  16.     <td>1 </td>
  17.   </tr>
  18. </table>


Моя попытка
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3.  
  4.  
  5. $result = mysql_query("SELECT DISTINCT name FROM sotrudniki");
  6.  
  7. $myrow = mysql_fetch_array ($result);
  8.  
  9.  
  10. $i=0;
  11.  
  12.  
  13.  
  14. do {
  15.          
  16.          $i++;
  17.                  
  18. printf ("<tr><td>$i</td>
  19.    <td>%s</td>
  20.    <td>%s</td>
  21.    <td>%s</td></tr>",$myrow['name']);
  22. }
  23. while ($myrow = mysql_fetch_array ($result));
  24.  
  25. ?>


Помогите дописать или может есть решения по проще ?
2. Vladimir Kheifets - 25 Июля, 2018 - 08:24:06 - перейти к сообщению
elikmhs пишет:
Допустим в базе есть таблица Сотрудники с полями имя, возраст и пол.
Требуется создать таблицу в цикле так чтобы каждое имя отображалась один раз а рядов вывести количество сотрудников с таким именем.

Таблица в БД

Спойлер (Отобразить)

Требуется вывести
CODE (html):
скопировать код в буфер обмена
  1. <table width="500" border="1" cellspacing="0" cellpadding="10">
  2.   <tr>
  3.     <td>ИМЯ</td>
  4.     <td>КОЛ. СОТРУДНИКОВ</td>
  5.   </tr>
  6.   <tr>
  7.     <td>Иван</td>
  8.     <td>2 </td>
  9.   </tr>
  10.   <tr>
  11.     <td>Олег</td>
  12.     <td>3 </td>
  13.   </tr>
  14.   <tr>
  15.     <td>Инна</td>
  16.     <td>1 </td>
  17.   </tr>
  18. </table>


Моя попытка
Спойлер (Отобразить)

Помогите дописать или может есть решения по проще ?



Добрый день!
Я бы в начале выбрал все имена из БД с сортировкой по имени, а потом сделал бы массис для печати.
Спойлер (Отобразить)
Удачи!
3. elikmhs - 25 Июля, 2018 - 09:16:35 - перейти к сообщению
[quote=Vladimir Kheifets][quote=elikmhs]Допустим в базе есть таблица Сотрудники с полями имя, возраст и пол.
Ваш вариант работает.
Но к сожалению я не могу правильна составит запрос к БД (MySql) чтобы выводить эту информацию из БД.

Я пишу так:
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2. //Допустим, что в БД имена не отсотрованы так, как в массиве $names
  3. $names = mysql_query("SELECT name FROM sotrudniki");
  4. echo "<pre>"; print_r($names); echo "</pre>";
  5. sort($names);
  6. echo "<pre>"; print_r($names); echo "</pre>";
  7. $out=[];
  8. $name1=$names[0];
  9. $count=0;
  10. foreach($names as $name)
  11. {
  12.         if($name==$name1)
  13.         {
  14.                 $count++;
  15.         }
  16.         else
  17.         {
  18.                 $out[]=[$name1,$count];
  19.                 $name1=$name;
  20.                 $count=1;
  21.         }
  22. }
  23. if($count>0) $out[]=[$name1,$count];
  24. echo "<pre>"; print_r($out); echo "</pre>";
  25.  
  26. ?>

 

Powered by ExBB FM 1.0 RC1