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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: MySQL- запрос

 PHP.SU

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


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

> Без описания
JoyStick
Отправлено: 02 Февраля, 2012 - 14:14:16
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Есть две табл.

Техники
___________________________
| id_texniki | name | options |
-------------------------------- ------
| 1 | texnika1 | 1,2,4,5 |
-------------------------------- ------
| 2 | texnika2 | 4,5 |
-------------------------------- ------

Цель техники

-------------------------
| id_cel | cel_texniki |
-------------------------
| 1 | тренинг |
-------------------------
|2 | аутотренинг |
-------------------------
| 3 |понимание |
-------------------------
| 4 | уроки |
-------------------------
|5 |упражнения|
-------------------------

В поле options заносятся id_cel.

Нужен запрос на вывод такой табл

-------------------------
|cel_texniki | Сумма |
-------------------------
|тренинг | 1 |
-------------------------
|аутотренинг |1 |
-------------------------
|понимание |0 |
-------------------------
|уроки | 2 |
-------------------------
|упражнения |2 |
-------------------------
Сумма - это сколько раз оно встречается.
 
 Top
Bio man
Отправлено: 02 Февраля, 2012 - 14:24:13
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




я бы еще добавил таблицу options и удалил бы options из Техники. и дальше все просто можно посчитать. иначе придется прибегать к углубленным темам sql (разбивка строк, например)
 
 Top
JoyStick
Отправлено: 02 Февраля, 2012 - 14:25:44
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Bio man пишет:
иначе придется прибегать к углубленным темам sql (разбивка строк, например)

воти я о том же, но нужно сделать именно в таком виде(
 
 Top
Zuldek
Отправлено: 02 Февраля, 2012 - 14:45:39
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




JoyStick пишет:
Bio man пишет:
иначе придется прибегать к углубленным темам sql (разбивка строк, например)

воти я о том же, но нужно сделать именно в таком виде(

Нужно кому вам чтобы не менять структуру бд?
Так вот она в корне неверная в существующем виде, как писал предыдущий оратор.
 
 Top
JoyStick
Отправлено: 02 Февраля, 2012 - 14:48:17
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Zuldek пишет:
Нужно кому вам чтобы не менять структуру бд?
Так вот она в корне неверная в существующем виде, как писал предыдущий оратор.

Подскажите как правильно организовать...
 
 Top
Саныч
Отправлено: 02 Февраля, 2012 - 14:57:33
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.cel_texniki, (
  2.         SELECT COUNT(*) FROM t2 WHERE POSITION(t1.id_cel IN t2.options) != 0
  3. ) AS `sum`
  4. FROM t1


Но структура у вас неверная, как уже писали выше. Нужно таблица техники, таблица целей и третья таблица связей цель-техника

(Отредактировано автором: 02 Февраля, 2012 - 14:58:19)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Zuldek
Отправлено: 02 Февраля, 2012 - 14:59:48
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Техники
___________________________
| id_texniki | name | options |
-------------------------------- ------
| 1 | texnika1 | 1,2,4,5 |
-------------------------------- ------
| 2 | texnika2 | 4,5 |
-------------------------------- ------


id записи|id техники|id_celi|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 4 |
...

-------------------------
| id_cel | cel_texniki |
-------------------------
| 1 | тренинг |
-------------------------
|2 | аутотренинг |
-------------------------
| 3 |понимание |
-------------------------
| 4 | уроки |
-------------------------
|5 |упражнения|
-------------------------
(Добавление)

Использование такой структуры, как у вас, возможно только в одном единственном случае, когда вы пишите для уже написанного большого приложения где сложно изменить структуру бд.

(Отредактировано автором: 02 Февраля, 2012 - 15:02:27)

 
 Top
Саныч
Отправлено: 02 Февраля, 2012 - 15:07:07
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Zuldek пишет:
id записи|id техники|id_celi|

id записи записи в данном случае лишнее... Primary Key на оба столбца и все.

(Отредактировано автором: 02 Февраля, 2012 - 15:11:41)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
JoyStick
Отправлено: 04 Февраля, 2012 - 10:25:02
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Саныч пишет:
SELECT t1.cel_texniki, (
SELECT COUNT(*) FROM t2 WHERE POSITION(t1.id_cel IN t2.options) != 0
) AS `sum`
FROM t1


Как сделать вывод этого результат? В mysql запрос вроде работает.
(Добавление)
все не надо)
(Добавление)
Решил добавить 3 таблицу, вот только проблема. id записи - автоинкримент, id_texnik тож все норм, а вот id_cel заносит 0.
получается такое
| 1 | 5 | 0 |

А нужно что бы заносило вот так
| 1 | 5 | 1 |
| 2 | 5 | 2 |
| 3 | 5 | 16|
| 4 | 3 | 2 |
| 5 | 3 | 4 |
(Добавление)
Мысли двигаются в таком направлении, но пока не работает...в чем ошибка?

foreach($checkboxes as $check) {
$id_texnik = mysql_insert_id();
$sql = mysql_query("INSERT INTO `navigat_bd`.`note_table` (id_note, id_texnik, id_cel)
VALUES(NULL, '".(int)$id_texnik."','".(int)$check."')");
}
(Добавление)
Это у меня на странице(поле)
<?php
$query = 'SELECT id_cel, cel_texniki FROM cel_texniki ORDER BY cel_texniki';
$result = mysql_query ( $query );
while ( $row = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
echo "<input type='checkbox' name='options[]' value=".$row['id_cel'].">".$row['cel_texniki']."<br>";
}

?>

(Отредактировано автором: 04 Февраля, 2012 - 12:08:45)

 
 Top
JoyStick
Отправлено: 07 Февраля, 2012 - 10:43:00
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Народ помогите, очень надо
(Добавление)
PHP:
скопировать код в буфер обмена
  1.   list($options)= split (", ", $options);
  2.  
  3.    
  4.     foreach($options as $id_cel) {
  5.     $id_texnik = mysql_insert_id();
  6.     $sql = mysql_query("INSERT INTO `navigat_bd`.`note_table` (id_note, id_texnik, id_cel)
  7.        VALUES(NULL, '".(int)$id_texnik."','".$id_cel."')");
  8.     }


Разбиваю строку и вроде оно как должно все работать, но пишет ошибку
Warning: Invalid argument supplied for foreach()
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB