Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Открыть новую тему     Написать ответ в эту тему

hunter29



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lagudal, как по мне, лучше сделать еще одну табличку "tags" с двумя столбцами: photo_id, tag. И для каждого фото (photo_id) писать один тег. Так будет проще искать, если, например будет два фото с тегами (животное, собака), (животное, кошка). По запросу "животное" получаем два фото.. Это связь один-ко_многим, если не ошибаюсь..

Всего записей: 39 | Зарегистр. 30-12-2008 | Отправлено: 12:13 19-01-2011
lagudal



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hunter29
может быть, но я пока не хочу персонализировать каждое фото отдельно - важно быстро прописать одинаковые теги большой группе фото..
В дальнейшем - я не знаю, дело в том, что это стандартная галерея, не хотелось бы с моим нынешним уровнем подготовки менять структуру ее бд...

Всего записей: 37 | Зарегистр. 30-09-2008 | Отправлено: 13:17 19-01-2011
hunter29



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UPDATE images
SET tags = 'тэги для первой сотни'
WHERE id > 0 AND id < 101;
 
UPDATE images
SET tags = 'тэги для второй сотни'
WHERE id > 100 AND id < 201;
 
... и т.д.
 
Если диапазонов очень много, может с помощью языка программирования сделать? Хотя сдесь копипастом можно
 
 
Добавлено:
Но делай бэкап бд, мало ли че..

Всего записей: 39 | Зарегистр. 30-12-2008 | Отправлено: 14:41 19-01-2011
lagudal



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hunter29
спасибо, все нормально, вроде как все абсолютно так как надо срабатывает.
Не очень много диапазонов, так что вполне, вполне..
еще раз спасибо

Всего записей: 37 | Зарегистр. 30-09-2008 | Отправлено: 18:30 19-01-2011
Gua



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нужен запрос который заменит <script src="ЛЮБОЙ ТЕКСТ" type="text/javascript"></script> на ""
 
По идее как то так должно быть
 
update ИМЯ_ТАБЛИЦЫ set ИМЯ_ПОЛЯ = replace(ИМЯ_ПОЛЯ, '<script src="ЛЮБОЙ ТЕКСТ" type="text/javascript"></script>', '') where ИМЯ_ПОЛЯ like '%<script src="ЛЮБОЙ ТЕКСТ" type="text/javascript"></script>%';
 
Возможно ли сделать такой запрос?

Всего записей: 64 | Зарегистр. 28-03-2006 | Отправлено: 11:21 20-01-2011
hunter29



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Gua,
UPDATE имя_таблицы
SET имя_поля = ''
WHERE имя_поля LIKE '<script src="%" type="text/javascript"></script>';

Всего записей: 39 | Зарегистр. 30-12-2008 | Отправлено: 13:32 20-01-2011 | Исправлено: hunter29, 13:34 20-01-2011
Gua



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hunter29
 
В этом случае если поле содержит <script src="%" type="text/javascript"></script> то оно станет пустым.
 
Надо чтобы сохранялся текст который имеется в поле, а <script src="%" type="text/javascript"></script> заменялось на ""

Всего записей: 64 | Зарегистр. 28-03-2006 | Отправлено: 14:42 20-01-2011
hunter29



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Gua, я так понимаю в базе есть поля типа 'bla_before_<script src="blabla" type="text/javascript"></script>bla_after', а должно получиться 'bla_before_bla_after'?
Если так, то судя по ссылкам, которые дает гугл, например http://www.webmasterworld.com/forum88/1459.htm где рассматривается именно твой случай, нужно воспользоваться, например, php.

Всего записей: 39 | Зарегистр. 30-12-2008 | Отправлено: 16:18 20-01-2011
Gua



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hunter29
Спасибо, используя php все получилось.

Всего записей: 64 | Зарегистр. 28-03-2006 | Отправлено: 16:42 20-01-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто нибудь находил приличное решение выборки из нескольких таблиц с одинаковыми названиями столбцов (да хотя бы тот же популярный столбец ID), чтобы данные из разных таблиц проще выбирались из ассоциативного массива?  
Нет, конечно можно перечислять все поля как
SELECT table1.column1 as data1, table2.column1 as data2 ...
но может кто то видел проще варианты, без перечисления?
можно, конечно, получить количество столбцов в таблице (DESCRIBE table) и потом обработать полученные данные по номерам элементов массива в ответе.. но вдруг есть что то проще..

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:30 04-02-2011 | Исправлено: Cheery, 23:32 04-02-2011
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, может, попробовать что-то помыслить с mysql_result? Он позволяет получить доступ вплоть до database.table.column
 

Код:
create table t1 (id integer primary key, val integer);
create table t2 (id integer primary key, val integer);
 
insert into t1 values (1, 100), (2, 150);
insert into t2 values (1, 120), (2, 170);
 
select t1.*, t2.* from t1 inner join t2 using(id);
+----+------+----+------+
| id | val  | id | val  |
+----+------+----+------+
|  1 |  100 |  1 |  120 |
|  2 |  150 |  2 |  170 |
+----+------+----+------+
2 rows in set (0.00 sec)
 


Код:
    $sql = mysql_query("select t1.*, t2.* from t1 inner join t2 using(id)", $db);
       
    while ( $row = mysql_fetch_assoc($sql) )
    {
       print_r($row);
    }

Насколько я понял, проблема в этом. mysql_fetch_assoc не разделяет одноименные столбцы из разных таблиц:

Код:
Array
(
    [id] => 1
    [val] => 120
)
Array
(
    [id] => 2
    [val] => 170
)

Можно попробовать что-то типа:

Код:
    for ($i = 0; $i < mysql_num_rows($sql); $i++)
    {
       $row["t1.id"] = mysql_result($sql, $i, "t1.id");
       $row["t1.val"] = mysql_result($sql, $i, "t1.val");
       $row["t2.id"] = mysql_result($sql, $i, "t2.id");
       $row["t2.val"] = mysql_result($sql, $i, "t2.val");
       
       print_r($row);
    }


Код:
Array
(
    [t1.id] => 1
    [t1.val] => 100
    [t2.id] => 1
    [t2.val] => 120
)
Array
(
    [t1.id] => 2
    [t1.val] => 150
    [t2.id] => 2
    [t2.val] => 170
)

Или используя mysql_result написать свою какую-нибудь специфичную реализацию mysql_fetch_assoc

----------
www.MyFirstSite.ru - информационный ресурс для начинающих веб-мастеров

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 11:19 05-02-2011
Chern



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите ли составить запрос на удаление записей:
delete from EVENTS where EVT_CONT ..., а вот дальше не знаю что писать.  
 
В поле EVT_CONT содержатся значения типа "2011-02/03/01-DCS/next0007/21_30_54.avi" и надо удалять записи, если не существует файл по адресу /media/nano/cam/2011-02/03/01-DCS/next0007/21_30_54.avi
 
Как это можно организовать?

Всего записей: 746 | Зарегистр. 03-06-2003 | Отправлено: 11:52 05-02-2011
poyt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Chern

Цитата:
Как это можно организовать?

Организовать проверку файла в серверном скрипте, например, на PHP - проверять существования файла по названию, при отсутствии - вызывать удаление с передачей имени файла.
И тогда ваш запрос будет вида:

Цитата:
DELETE FROM table WHERE param = 'значение';

Всего записей: 642 | Зарегистр. 26-06-2006 | Отправлено: 17:16 05-02-2011 | Исправлено: poyt, 17:18 05-02-2011
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все конечно очень сильно зависит от многих параметров (размера базы и т.п.), но, как вариант, сначала можно сделать выборку идентификаторов и имен файлов:
 
select id, filename from table;
 
пробежаться по полученному массиву, проверить существование каждого файла. Запоминать id отсутствующих файлов. Ну и затем:
 
delete from table where id in (список id через запятую);

----------
www.MyFirstSite.ru - информационный ресурс для начинающих веб-мастеров

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 17:48 05-02-2011
Chern



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
Спасибо, я тоже пришел к этому выводу, но моих знаний не хватает, чтобы это организовать.

Всего записей: 746 | Зарегистр. 03-06-2003 | Отправлено: 21:47 05-02-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79

Цитата:
Можно попробовать что-то типа:  

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:44 05-02-2011
GOSEF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени!
Помогите разобраться с проблемой:
Есть каталогизатор видео AllMyMovies (AMM). На основе базы AMM (MS Access) сделан мини движок на PHP для вывода данных из базы в HTML. Работает мини движок посредством Апача (использую набор Vertrigo) и ODBC. Хочу перенести базу в MySQL. К сожалению, очень далёк от веб-программирования. Встретил кучу проблем.
_http://rghost.ru/4301004 -  здесь выложил комплект мини движка, копию базы из MySQL (переносил в MySQL с помощью ESF Database Migration Toolkit).
_http://www.bolidesoft.com/rusforum/about816-0.html - здесь более подробно о мини-движке.
 
Основная проблема не могу правильно составить запрос в MySQL и отобразить результат.
Вот основные функции, которые не могу переписать:
odbc_exec  
odbc_longreadlen  
odbc_fetch_array
 
Например, :
В исходнике
$db = odbc_connect ('mydb','','');
if (isset ($MovieID)) /*Если получен ID фильма делать выборку по полученному ID*/
{
$result=odbc_exec($db,"SELECT * FROM movies WHERE MovieID=$MovieID");
odbc_longreadlen ($result, 51200);
$myrow=odbc_fetch_array($result);
}
 
меняю на
$db = mysql_query ("SELECT * FROM movies WHERE MovieID=$MovieID");
// $db = odbc_connect ('mydb','','');
if (isset ($MovieID)) /*Если получен ID фильма делать выборку по полученному ID*/
{
$result=mysql_query("SELECT * FROM movies WHERE MovieID=$MovieID");
//fetch_longreadlen ($result, 51200);
$myrow=mysql_fetch_array($result);
}
 
В результате загружаются мегабайты информации, но на страничку ничего не выводится...
Если есть возможность, подскажите, пожалуйста, хотя бы на примере одного запроса и вывода результата.

Всего записей: 11 | Зарегистр. 29-05-2010 | Отправлено: 18:36 11-02-2011 | Исправлено: GOSEF, 18:37 11-02-2011
Kaylang



Вредный и упрямый
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GOSEF
Судя по приведенному коду, делаете выборку, но не выводите на экран.

Код:
$db = odbc_connect ('mydb','','');

должно быть функция соединения с БД. Вы ее просто заменили на запрос в БД.  
Можете использовать что-то такое (достаточно древний вариант):

Код:
 
function db_connect()
{
    $hostname="localhost"; // сервер MySQL
    $username="root";  // имя пользователя MySQL
    $password="root";  // пароль пользователя MySQL
    $dbname="mydb";  // имя БД в которой хранятся данные.
 
    $connect = mysql_connect($hostname,$username,$password);
    @mysql_select_db("$dbname", $connect) or die ('Invalid connect: '.mysql_error());
 
    return $connect;
}
 

тогда в коде, вместо  

Код:
$db = odbc_connect ('mydb','','');

используйте

Код:
$db = db_connect ();

вот это:
Код:
$db = mysql_query ("SELECT * FROM movies WHERE MovieID=$MovieID");
// $db = odbc_connect ('mydb','','');  
в данном месте совсем было ни к чему,

Код:
if (isset ($MovieID)) /*Если получен ID фильма делать выборку по полученному ID*/
{
$result=mysql_query("SELECT * FROM 'movies' WHERE 'MovieID'=$MovieID") or die('Invalid query: '.mysql_error());
 
    while ($myrow = mysql_fetch_assoc($result)) {
        здесь вывод на экран.
    }
    mysql_free_result($result);
}
 

ЗЫ. Вместо while можно использовать foreach.

Всего записей: 38546 | Зарегистр. 29-08-2002 | Отправлено: 19:27 11-02-2011 | Исправлено: Kaylang, 19:34 11-02-2011
GOSEF

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени!
 
Есть вот такой код:
 
<?php
if (isset ($_POST['submit_s'])) {$submit_s = $_POST['submit_s'];}
if (isset ($_POST['search'])) {$search = $_POST['search'];}
if (isset ($submit_s))
{
if (empty($search) or strlen($search) < 3)
{
exit ("<p>Для поиска необходимо ввести не менее 3х символов.</p>");
}
}
 
$search = trim($search);
$search = stripslashes($search);
$search = htmlspecialchars($search);
$search = str_replace("'","",$search);
 
$result_search = mysql_query ("SELECT * FROM movies WHERE (((name) LIKE '%$search%')) OR (((originaltitle) LIKE '%$search%')) ORDER BY name");
$myrow_search = mysql_fetch_array ($result_search);
$result_search_rows = mysql_query ( "SELECT COUNT (*) AS numberoforders FROM movies WHERE (((name) LIKE '%$search%')) OR (((originaltitle) LIKE '%$search%'))");
$myrow_search_rows = mysql_fetch_array ($result_search_rows);
$count_search_rows = $myrow_search_rows['numberoforders'];
 
$result_search2 = mysql_query ("SELECT * FROM actors WHERE (((Name) LIKE '%$search%')) OR (((altname) LIKE '%$search%')) ORDER BY name");
$myrow_search2 = mysql_fetch_array ($result_search2);
$result_search2_rows = mysql_query ( "SELECT COUNT (*) AS numberoforders FROM actors WHERE (((name) LIKE '%$search%')) OR (((altname) LIKE '%$search%'))");
$myrow_search2_rows = mysql_fetch_array ($result_search2_rows);
$count_search2_rows = $myrow_search2_rows['numberoforders'];
 
$count_all = ($count_search_rows + $count_search2_rows);
 
$movieid = $myrow_search['movieid'];
?>
 
Выдаёт ошибку (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in search.php on line) на строки:
$count_search_rows = $myrow_search_rows['numberoforders'];
$count_search2_rows = $myrow_search2_rows['numberoforders'];
 
Подскажите, что не так?
 
Ещё смущают такие запросы:
$result_search2 = mysql_query ("SELECT * FROM actors WHERE (((Name) LIKE '%$search%')) OR (((altname) LIKE '%$search%')) ORDER BY name");
 
Так можно запрашивать?

Всего записей: 11 | Зарегистр. 29-05-2010 | Отправлено: 14:37 16-02-2011
malefix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть таблицы users (пользователи) и phones (телефоны), поля такие:
users.id
users.name
phones.phone
phones.owner
связаны таблицы так users.id = phones.owner
 
софт для этой базы писался давно и в нем не было проверки на дублирующиеся телефоны. Сейчас есть такие записи в таблице phones, где phone один, а owner разные (т.е. один телефон записан на разных юзеров)
 
как мне составить запрос, чтобы он показал какие юзеры имеют одинаковые телефоны, чтобы потом удалить ненужные записи из phones?

Всего записей: 58 | Зарегистр. 18-11-2008 | Отправлено: 07:32 17-02-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru