Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поиск слов по базе и создание не существующих

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]   [41-50]   [51-60]  ...    [61-62] 

 
 автор: Trianon   (11.09.2008 в 11:17)   письмо автору
 
   для: Proger   (11.09.2008 в 00:24)
 

>и не то и не то, просто я не общественный банк кода

Ок. Я учту.

   
 
 автор: Ocelot   (11.09.2008 в 01:52)   письмо автору
 
   для: Proger   (11.09.2008 в 01:21)
 

Суть в разделении на 2 функции.
1) добавляет значения
2) берет их id
напр. при сохранении тегов (если мы не выводим список тегов пользователю) нам не нужно получать его из базы.
При подготовке можно просто получать список тегов уже имеющихся в базе, не занося новые (показать пользователю, что уже есть и сколько экземпляров чего-то помечено этим тегом).
Итого: пока редактируем у нас будет 5-10 селект запросов (смотря сколько раз юзер правил список и как часто мы обновляем его) и один инсерт при сохранении.

   
 
 автор: Ocelot   (11.09.2008 в 01:46)   письмо автору
 
   для: Ocelot   (11.09.2008 в 00:59)
 

автор: Ocelot (11.09.2008 в 00:59) письмо автору
2 Трианон: прошу прощеия, на часах 4 часа ночи (по местному)... не доконца понял задачу.

   
 
 автор: Ocelot   (11.09.2008 в 01:36)   письмо автору
 
   для: Valick   (11.09.2008 в 01:06)
 

вместо возврата 2 вернем на место $лист
и цикл... только ИМХО он тут не есть лучшее решение

   
 
 автор: Proger   (11.09.2008 в 01:21)   письмо автору
 
   для: Valick   (11.09.2008 в 01:06)
 

Скормить "это" в задачи функции не входило даже. Я потому свой код и не привел ибо у нас как я понимаю конечные задачи координально различатся!


Ocelot - немного не понятно что же выйдет на результат, но код по быстродействую выигрывает. Только не понимаю чей алгоритм он реализует...
ЗЫ опять кофе плохой...

   
 
 автор: Valick   (11.09.2008 в 01:06)   письмо автору
 
   для: Ocelot   (11.09.2008 в 00:59)
 

Вы не ознакомились с заданием. Функция (код) должна возвращать АйДи строк содержащихся в массиве (если строки нет в базе, то вставить её и вернуть её АйДи). В принципе мой код (см выше) рабочий (упс... нашёл ещё огрех ... вобщем-то и есть куда совершенствовать код), только осталось сделать её "всеядной"
I 100% know why O"Relly & partners doesn't eat Mc'donalds Gamburgers\Cheeseburgers
"скормить" пока не смог)) (хотя толком ещё и не пробовал)
Появилась мысль ограничиться одним селектом (без цикла)... сёдня спать, а завтра буду думать.

   
 
 автор: Ocelot   (11.09.2008 в 00:59)   письмо автору
 
   для: Trianon   (10.09.2008 в 01:11)
 

Почитал:
<?php
function show_id($table,$field_id,$field_word,$mass

  
// зачем этот цикл?
  
for(;
  {      
    
// зачем выносить запрос в отдельную переменную? чтобы выполнить лишний оператор присваивания?
    
$sql "SELECT `$field_id` AS fi, `$field_word` AS fw FROM `$table` WHERE fw IN "to_sql($mass);
    if(!(
$res=mysql_query($sql)))    exit("Error in $sql : " .mysql_error()); 
     
// сдесь в этом варианте нужно сделать отступ, чтоб читать было легче
    
for($list = array(); $row mysql_fetch_assoc($res); $list[$row['fw']] = intval($row['fi'])) ;
    
// если перенес на другую строку, то будь добр увелич отступ, т.к. этот иф лежит внутри фора 
    
if(count($list) == $count($mass))    return $list
    
// опять используем лишнюю переменную
    
$sql "INSERT IGNORE INTO `$table` (`$field_word`) VALUES " to_sql(array_diff($massarray_keys($list))) 
     
// нет слов...
    
if(!($res=mysql_query($sql)))    exit("Error in $sql : " .mysql_error()); 
     
// нет слов...
    
if(!mysql_affected_rows())       exit("Error in $sql : no rows added"); 
  }   
// конец ненужного цикла
}

Зачем нам return $list если в случае, когда нуно что-либо добавить мы ничего не возващаем абсолюнто.
Убрал лишний мусор, продумал возврат значенй:
если ничего добавлять не надо, то функция вернет 2.
добавили что-то = 1
ошибка = 0
вот что получилось:
<?php
function show_id($table,$field_id,$field_word,$mass

   if(
$res=mysql_query("SELECT `$field_id` AS fi, `$field_word` AS fw FROM `$table` WHERE fw IN "to_sql($mass)) )
   {
        for(
$list = array(); $row mysql_fetch_assoc($res); $list[$row['fw']] = intval($row['fi'])); 
            if(
count($list) == $count($mass))
                return 

     
if( mysql_query("INSERT IGNORE INTO `$table` (`$field_word`) VALUES " to_sql(array_diff($massarray_keys($list)))) ) return 1; else return 0;
  } else return 
0;
}

зы: то, что внутри текста запроса я не читал, просто скопировал. проверь скобки и запятые, чтоб на месте были

   
 
 автор: Valick   (11.09.2008 в 00:41)   письмо автору
 
   для: Proger   (11.09.2008 в 00:24)
 

У вас случайно не двойное гражданство?
Я попросил вас выложить кусочек кода, чтобы я мог посмотреть ход ваших мыслей. Это нужно было лично мне. И я считаю раз уж вы обращаетесь за помощью в данном вопросе, то могли бы ответить взаимностью. Вместо этого вы несёте какую-то чепургу.
Вобщем лично я сделал кое-какие выводы относительно вас. И как любил говаривать В. Стрельников "Доззвиданья"

-2-

   
 
 автор: Proger   (11.09.2008 в 00:24)   письмо автору
 
   для: Trianon   (09.09.2008 в 23:32)
 

и не то и не то, просто я не общественный банк кода)) Да и всё равно я чуствую что человек делает иначе, дык мой код с его сравнивать в данном случае глупо.

   
 
 автор: Trianon   (10.09.2008 в 01:11)   письмо автору
 
   для: Valick   (10.09.2008 в 00:49)
 

Код набросал на одном дыхании, и не проверял.
Ляпов может быть море.
<?
function to_sql($x)
{
    return 
is_array($x) ? ('('implode(',',array_map('to_sql'$x)).')')
         : 
is_string($x) ? ("'"mysql_escape_string($x)."'")
         : 
is_numeric() ? $x;
}
function 
show_id($table,$field_id,$field_word,$mass)
{
  for(;;)
  {
    
$sql "SELECT `$field_id` AS fi, `$field_word` AS fw FROM `$table` WHERE fw IN "to_sql($mass);
    if(!(
$res=mysql_query($sql)))    exit("Error in $sql : " .mysql_error());
    for(
$list = array(); $row mysql_fetch_assoc($res); $list[$row['fw']] = intval($row['fi'])) ;
    if(
count($list) == $count($mass))    return $list;
    
$sql "INSERT IGNORE INTO `$table` (`$field_word`) VALUES " to_sql(array_diff($massarray_keys($list)))
    if(!(
$res=mysql_query($sql)))    exit("Error in $sql : " .mysql_error());
    if(!
mysql_affected_rows())       exit("Error in $sql : no rows added");
  }
}

   

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]   [41-50]   [51-60]  ...    [61-62] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования