PDA

Просмотр полной версии : [sql] Вопросы по БД


Страницы : 1 2 3 4 [5]

Freakazoitt
14.01.2010, 13:37
Есть вот такой кусок кода:

$user=$row['nick'];
if (preg_match("/me", $msg, $msg_1))
{
$msg=str_replace ("/me","<i>".$user."",$msg);
$user="";
}

он не работает на второй строчке

надо: Если строка $msg начинается на "/me" то выполнить действие ниже

krypt3r
14.01.2010, 13:46
1. Неверная регулярка.
2. Неверная тема

vorona
14.01.2010, 20:56
1. При регистрации в поле записывается логин, например, XxX. Почему в форме входа на сайт катит также xxx, XXx? т.е. нету чувствительности к регистру.
2. Если при запросе WHERE id не существует, то выводится ошибка (предупреждение). Как правильно проверять поле на существование?
3. Какая пропорциональная зависимость между проиндексированным столбиком и не проиндексированным?

GlooK
14.01.2010, 22:41
При регистрации в поле записывается логин, например, XxX. Почему в форме входа на сайт катит также xxx, XXx? т.е. нету чуствительности к регистру.

Скорей всего функция сравнения (на PHP, к примеру) логина с эталоном, сравнивает их в нижнем регистре.

vorona
14.01.2010, 22:42
Скорей всего функция сравнения (на PHP, к примеру) логина с эталоном, сравнивает их в нижнем регистре.
Ну я перед этим строку обрабатываю htmlentities в вин-1251 кодировке. Это ж не может влиять?

GlooK
14.01.2010, 22:48
Ну я перед этим строку обрабатываю htmlentities в вин-1251 кодировке. Это ж не может влиять?
Кусок кода выложи хотя бы...

vorona
14.01.2010, 22:54
function xxx($var)
{
$var=htmlentities($var, ENT_QUOTES, 'Windows-1251');
return $var;
}


$_POST = array_map("xxx",$_POST);

..................


if(count($_POST)>0){

$_POST['login']=substr($_POST['login'],0,20);
$_POST['pass']=substr($_POST['pass'],0,20);


$sum=0;

echo '<center><b>При ыходе были допущены такие <font color="red">ошибки</font>:</b></center><br>';

if(!isset($_SESSION['captcha_keystring']) || $_SESSION['captcha_keystring'] !== $_POST['keystring']){

echo '<br><font color="red">Неверно введен проверочный код.</font><br>';
$sum=$sum+1;
}

if (!isset($_POST['login']) || strlen($_POST['login'])<3)
{
echo '<br><font color="red">Не введён логин или он слишком короткий.</font><br>';
$sum=$sum+1;
}

if (!isset($_POST['pass']) || strlen($_POST['pass'])<3)
{
echo '<br><font color="red">Не введён пароль или он слишком короткий.</font><br>';
$sum=$sum+1;
}


if (!preg_match("/^([a-zA-Z0-9]+)$/", $_POST['login']))
{
echo '<br><font color="red">В поле "логин" присутствуют недопустимые символы.</font><br>';
$sum=$sum+1;
}
if (!preg_match("/^([a-zA-Z0-9]+)$/", $_POST['pass']))
{
echo '<br><font color="red">В поле "пароль" присутствуют недопустимые символы.</font><br>';
$sum=$sum+1;
}


$sql = 'SELECT * FROM `users` WHERE `login`="'.$_POST['login'].'"';

$r=mysql_query($sql,$conn);


$row=mysql_fetch_row($r);


if ($row[1]!=="" && isset($row[1]) && $row[2]!==md5($_POST['pass']))
{

echo '<br><font color="red">Неверный логин или пароль.</font><br>';
$sum=$sum+1;
}


if (!isset($row[1]))
{

echo '<br><font color="red">Неверный логин или пароль.</font><br>';
$sum=$sum+1;
}



if ($sum==0) {


действия

}




}

vorona
14.01.2010, 23:57
Всё, сам нашел ошибку.
Ответьте пжлст на 2 и 3 вопросы.

Freakazoitt
15.01.2010, 13:13
Вопрос:

В таблице есть ячейка id. Она без auto_increment (Он мешает другой функции)
Надо: вписать строку и присвоить ячейке id число, так, как это делает auto_increment
напр. если в предыдущей строке id было 14, зваисываем 15
как это делается?

blackybr
15.01.2010, 13:31
vorona

2. describe table column и смотреть что вернет (аналог show columns)

3. не понял вопрос?тт если это то, о чем я подумал - любые селекты по проиндексирвоанны намного быстрее.)

Freakazoitt

селекти max(id) и увеличивай его на 1...

PEPSICOLA
17.01.2010, 03:43
Подскажите пожалуйста какие параметры у стандартной базы MySQL на английский язык.

Type: MyISAM
Charset: cp1250 - Windows Central European
Collation: cp1250_general_ci

?

vorona
19.01.2010, 13:27
Кодировка базы win1251 general-ci.
Почему данные сохраняются в виде знаков этой кодировки?

И в какой лучше кодировке хранить данные windows 1251 или utf 8?


На какие типы можно индекс ставить?

Byrger
26.01.2010, 00:00
Есть куча таблиц table_1 table_2 и во всех них есть поле nick_id
как удалить строку из всех таблиц сразу зная nick_id

ПС 1 или несколько таблиц могут не содержать строку с таким ид

LStr1ke
26.01.2010, 00:13
DELETE `table_1` , `table_2` FROM `table_1` , `table_2` , `table_3` WHERE `table_1`.`id` = `table_2`.`id` && `table_2`.`id` = `table_3`.`id`


----


DELETE FROM `table_1` , `table_2` USING `table_1` , `table_2` , `table_3` WHERE `table_1`.`id` = `table_2`.`id` && `table_2`.`id` = `table_3`.`id`


........ WHERE id=15

Byrger
26.01.2010, 10:23
DELETE `table_1` , `table_2` FROM `table_1` , `table_2` , `table_3` WHERE `table_1`.`id` = `table_2`.`id` && `table_2`.`id` = `table_3`.`id`


----


DELETE FROM `table_1` , `table_2` USING `table_1` , `table_2` , `table_3` WHERE `table_1`.`id` = `table_2`.`id` && `table_2`.`id` = `table_3`.`id`


........ WHERE id=15

не получается, видимо из-за того что есть пустые таблицы

krypt3r
27.01.2010, 08:19
FOREIGN KEY, не?

Freakazoitt
27.01.2010, 12:33
Есть таблица (допустим 'table'), там есть записи, есть ячейки и т.д.
Иногда в ячейке 'asd' появляются записи, одинаковые для разных строк
Еще есть ячейка 'side'

Как извлечь это число (если оно оlинаково для двух и более записей и при этом у них разное 'side')?

superboy4
27.01.2010, 12:34
Нужно вывести пользователей по рейтингу
SELECT * FROM users INNER JOIN ratings ON ratings.rateable=users.id ORDER BY SUM(ratings.rating)/COUNT(ratings.rating)

:( не работает

???

superboy4
28.01.2010, 10:15
up

Здесь вообще помогают с вопросами?

REBUUS
28.01.2010, 11:32
ratings.rateable , это как я понял поле rateable в таблице ratings, это тоже надо после from писать, в общем не знаю :)


подробнее опиши что за таблицы и какие там данные, а то по моему там не order by , а group by надо делать

Freakazoitt
28.01.2010, 12:48
Есть таблица (допустим 'table'), там есть записи, есть ячейки и т.д.
Иногда в ячейке 'asd' появляются записи, одинаковые для разных строк
Еще есть ячейка 'side'

Как извлечь это число (если оно оlинаково для двух и более записей и при этом у них разное 'side')?

superboy4
28.01.2010, 13:04
таблица users, поля id,username,pass,email,
таблица ratings, поля id,user_id,rating,rateable

Pashkela
28.01.2010, 13:58
"по рейтингу" - как-то расплывчато, может это?

SELECT t1.*, SUM(t2.rating)
FROM users AS t1
LEFT JOIN ratings AS t2 ON t1.id=t2.user_id
GROUP BY t1.id limit 0,10

Freakazoitt
29.01.2010, 13:23
Есть таблица (допустим 'table'), там есть записи, есть ячейки и т.д.
Иногда в ячейке 'asd' появляются записи, одинаковые для разных строк
Еще есть ячейка 'side'

Как извлечь это число (если оно оlинаково для двух и более записей и при этом у них разное 'side')?

Кто-нибудь читает раздел???

Chaak
29.01.2010, 13:58
Как-то ты не по-русски написал)
Уточни что за число. И еще , ячейка я так понимаю это столбец?


Если я правильно тебя понял, то получится следующее:
SELECT id, asd
FROM rndtable
GROUP BY asd
HAVING COUNT( asd ) >1
AND id
IN (
SELECT id
FROM rndtable
GROUP BY side
HAVING COUNT( side ) =1
)

Freakazoitt
02.02.2010, 10:18
Как-то ты не по-русски написал)
Уточни что за число. И еще , ячейка я так понимаю это столбец?
Вобщем для примера:
таблица table
--
id -- asd -- side
1 -- 34 ---- 1
2 -- 34 ---- 1
3 -- 55 ---- 1
4 -- 55 ---- 2

так вот надо извлечь число "55", поскольку там одинаковое asd но разное side.

// такая комбинация может возникнуть только с одним числом asd - просто примечание

krypt3r
02.02.2010, 11:01
Возможно так

SELECT DISTINCT `asd` FROM `sometable` GROUP BY `asd`, `side` HAVING COUNT(*) = 1;

Fakamaz
02.02.2010, 15:59
Как правильно реализовать запрос к MySQL?
Имеется таблица 01_sites с столбцом plan нужно как то отсортировать данные по убыванию при plan-$d3
$d3 - это переменная в коде php :confused:

superboy4
02.02.2010, 16:49
"SELECT plan FROM 01_sites ORDER BY plan DESC"

Fakamaz
02.02.2010, 16:53
"SELECT plan FROM 01_sites ORDER BY plan DESC"
Мне надо не по столбику plan отсортировать,а по переменной так скажем $d4=Некое_число-$row["plan"]; И выводить по убыванию по переменной $d4

krypt3r
03.02.2010, 08:38
$some_number = 123;
mysql_query ("SELECT *, ($some_number - plan) AS d4 FROM 01_sites ORDER BY d4 DESC");

Fakamaz
04.02.2010, 09:27
$some_number = 123;
mysql_query ("SELECT *, ($some_number - plan) AS d4 FROM 01_sites ORDER BY d4 DESC");

Спасибо большое помогло

Komyak
04.02.2010, 15:04
Нужно сделать запрос к бд и узнать id последней строки. Не представляю как это можно реализовать.

Fuckel
04.02.2010, 15:11
отсортируй в обратном порядке (DESC или ASC) и бери первый элемент

Komyak
04.02.2010, 15:46
Мне в скрипте (как написал выше) нужно вставлять данные в базу, правильно ли будет, если запрос будет такого рода:

$sql = 'INSERT INTO `post` VALUES (LAST_INSERT_ID(), ''user'', '''')';

В смысле постоянно будут делаться такие запросы. Для меня ещё трудно ориентироваться в sql, поэтому такие трудности придумываю.

Spyder
05.02.2010, 19:26
Вопрос по MySQL. Есть таблица orders такого вида

CREATE TABLE `orders` (
`order_id` int(10) NOT NULL auto_increment,
`order_total` float NOT NULL default '0',
`order_date` datetime default '0000-00-00 00:00:00',
`date_accepted` datetime NOT NULL,
`date_rejected` datetime NOT NULL,
`ship_date` datetime NOT NULL,
`ship_method` varchar(45) NOT NULL default 'FEDEX2DAY',
`sat_deliv` varchar(3) default 'no',
`customer_id` int(11) NOT NULL default '0',
`status` int(11) NOT NULL default '0',
`p` tinyint(1) NOT NULL default '0',
`phys_id` int(11) NOT NULL default '0',
`shipping` float NOT NULL default '0',
`payment_type` varchar(50) NOT NULL,
`trans_id` varchar(200) NOT NULL,
`p_id` int(11) NOT NULL default '1',
`notes` text NOT NULL,
`session_data` longtext NOT NULL,
PRIMARY KEY (`order_id`),
UNIQUE KEY `order_id` (`order_id`),
KEY `order_date` (`order_date`),
KEY `customer_id` (`customer_id`),
KEY `ship_date` (`ship_date`),
KEY `Index_5` (`status`),
KEY `Index_6` (`p`),
KEY `phys_id` (`phys_id`),
KEY `order_date_2` (`order_date`)
) ENGINE=InnoDB AUTO_INCREMENT=62489 DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='InnoDB free: 37888 kB'


Задача: Изменить тип поля order_id с INT на VARCHAR( либо TEXT или BLOB). Собственно в чем проблема

alter table orders modify order_id varchar(100)

Error: Error on rename of './db_name/#sql-45fd_8573d7' to './db_name/orders' (errno: 150)

alter table orders modify order_id text

Error: BLOB/TEXT column 'order_id' used in key specification without a key length

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

budden
07.02.2010, 16:16
Подскажите как сдампить таблицу на 18мб?

Ситуация: mysql4.1, у юзера нет прав на LOCK TABLES, делая mysqldump без лока и с ключем -f (продолжать даже после ошибок), конечный файл получается только на 9 мбайт вместо 18-ти - из-за чего-то обрывается, может по таймауту - запрещено долго держать юзеру коннект, не знаю.

Факт есть факт. Поэтому вопрос - как все-таки сдампить?

Komyak
07.02.2010, 16:25
Подскажите как сдампить таблицу на 18мб?
Может Sypex Dumper

budden
07.02.2010, 18:25
Попробую, спасибо.

PS Получилось!

НTL
07.02.2010, 22:00
Какую команду надо отправить чтобы получить значение поля: "user" записи с id: 1?

ps: гугол молчит и дает много мусора...

b3
07.02.2010, 23:33
sql
SELECT user FROM table_name WHERE id=`1`;

Cybersteger
08.02.2010, 14:21
Подскажите как сдампить таблицу на PostgreSql ?

krypt3r
08.02.2010, 14:25
$ pg_dump -E utf8 -n schemaname -t tablename -f dump.sql dbname
$ man pg_dump
$ man pg_dumpall

Ну и phpPgAdmin есть

Cybersteger
08.02.2010, 14:33
$ pg_dump -E utf8 -n schemaname -t tablename -f dump.sql dbname
$ man pg_dump
$ man pg_dumpall

Ну и phpPgAdmin есть

А щось схоже на це є Sypex Dumper є. Де $ pg_dump -E utf8 -n schemaname -t tablename -f dump.sql dbname вписувати?

НTL
10.02.2010, 12:38
Как добавить в таблицу запись, при этом что бы запись имела порядковый id (id новый записи на 1 больше чем старой записи)?

krypt3r
10.02.2010, 13:16
Cybersteger, 1. не слышал, возможно, и есть. 2. в командной строке. 3. И пишите по-русски

HTL, можно, например, так

insert into ttt (state, order_id)
values (0, (select max(order_id) from ttt) + 1);

Только зачем, когда есть автоинкремент?

b3
10.02.2010, 13:19
Как добавить в таблицу запись, при этом что бы запись имела порядковый id (id новый записи на 1 больше чем старой записи)?
http://www.mysql.ru/docs/man/example-AUTO_INCREMENT.html

ZodiaX
14.02.2010, 23:44
Подскажите, что не правильно делаю при выгрузке текстового файла
LOAD DATA INFILE 'C:\bild.txt' INTO TABLE bd;
ERROR 29 (HY000): File 'Cild.txt' not found (Errcode: 22)
Все приведено дословно. Табуляция в файле соблюдена, но он по прежнему отказывается его видеть...

pali4
14.02.2010, 23:56
Такс, привет
помогите пожалуйста.
Суть такова:
Есть таблица, в ней есть 2 поля id и name

в таком формате записано 4 записи.

1 vasya
2 petya
3 vasya
4 masha

так, вот видидте, тут 2 Васи, их нужно удалить..
тоесть в поле name очень много дубликатов, подскажите как удалить дубликаты, а одного Васю оставить.)

shell_c0de
15.02.2010, 00:51
DELETE table1 FROM zzz as table1,zzz as table2 WHERE table1.x=table2.x AND table1.y=table2.y AND table1.unique_id>table2.unique_id

Где zzz - имя таблицы, x и y - поля

или так
CREATE TABLE tmp_ttt SELECT * FROM ttt GROUP BY pole, dublpole HAVING COUNT(dublpole) >= 1
Примерно так, принцип вроде понятен.
еще вариант
Удаления полных дубликатов записей через выполнение distinct select
--Создание копии таблицы без дубликатов во временной таблице
CREATE TEMPORARY TABLE bad_temp AS SELECT DISTINCT * FROM table_name;
--Удаление всех записей из старой таблицы
DELETE FROM table_name;
--Добавление записей без дублей
INSERT INTO table_name SELECT * FROM bad_temp;
--Удаление временной таблицы
DROP TABLE bad_temp;

Вариант с созданием временной таблицы:
CREATE TABLE tmpid SELECT MIN(ID) ID FROM table_name GROUP BY unique_key;
DELETE FROM table_name WHERE ID NOT IN (SELECT ID FROM tmpid);

НTL
17.02.2010, 16:19
В таблице есть поле с типом "data"
Какой запрос надо отправить чтобы удалить строки не сегодняшней даты?

krypt3r
18.02.2010, 08:17
... WHERE DATE(`data`) < DATE(NOW());

Buffalon
18.02.2010, 14:57
Есть текст типа
$massiv[0][1] = "Авиация и космос"
$e= $massiv[0][1];

ВОт код

$query="CREATE TABLE IF NOT EXISTS `se 123` (
`id` INT ( 5 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR( 255 ) NOT NULL ,
`text` TEXT NOT NULL,
PRIMARY KEY ( `id` )
)";
mysql_query($query) or die ("Не возможно создать таблицу<br>".mysql_error());


выводит

Не возможно создать таблицу
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Авиация и космонавтика ' ( `id` INT ( 5 ) NOT NULL AUTO_INCREMENT, `n' at line 1

Buffalon
20.02.2010, 13:38
мде...профессионалы блин

b3
20.02.2010, 17:04
Buffalon
Бред какой-то. SQL из твоего поста никак не может выводить ошибку содержащую текст "Авиация и космонавтика" т.к. ты не передаеш никаких переменных с этим значением. Перед тем как задать вопрос проверяй то что ты пишеш.

siw
20.02.2010, 17:24
Не используй русских букв в имени таблицы.
Уж если так хочется назвать таким именем переведи в транслит

felix_
21.02.2010, 05:26
SELECT count(*),`user`.`login`,`user`.`pass` FROM `user` HAVING md5(login,pass)=md5('loginPASS')

это не работает, а когда один параметр в например md5(login), то всё работает... как можно сделать чтоб с 2мя параметрами работало?
ответ-
SELECT count(*),`user`.`login`,`user`.`pass` FROM `user` HAVING md5(CONCAT(login,pass))=md5('loginPASS')

++Norton++
21.02.2010, 12:23
Вопрос такой, есть текстовый файл, в котором в указаны слова. Каждое с новой строки.
Их надо занести в БД выполнив простой:

INSERT INTO table VALUES ('', 'word_from_textfile');

где word_from_textfile - слово из данного текстового файла. Забить эти строки в БД нужно раз и навсегда. Но проблема в том, что строк больше 1000 и вручную забивать, мягко говоря, не очень хочется.
Какой более рациональный метод? Как лучше поступить?

b3
21.02.2010, 16:35
Вопрос такой, есть текстовый файл, в котором в указаны слова. Каждое с новой строки.
Их надо занести в БД выполнив простой:

INSERT INTO table VALUES ('', 'word_from_textfile');

где word_from_textfile - слово из данного текстового файла. Забить эти строки в БД нужно раз и навсегда. Но проблема в том, что строк больше 1000 и вручную забивать, мягко говоря, не очень хочется.
Какой более рациональный метод? Как лучше поступить?


<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); // Конект к БД
if (!$link) {
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db('foo', $link); // Выбираем Таблицу
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}

$file = file('your_file.txt'); // Файл с словами
$file = array_map('trim', $file);


$i = 0;
foreach ($file as $string) {

$result = mysql_query("INSERT INTO table VALUES ('', '$string');");
if (!$result) {
die($i.' Invalid query: ' . mysql_error().'<br>');
} else {
echo $i.' Строка ('.$string.') удачно занесена в БД<br>';
}

$i++;
}

mysql_close($link);
?>

НTL
28.02.2010, 20:55
Таблица может держать >10кк записей? и какая будет скорость при работе с такой таблицей?

+casper+
02.03.2010, 01:36
каким запросом делать поиск по колонке?? мне например нужно проверять есть ли значение в базе или нет, если нет то записать, а если есть удалить. как наваять такую ф-ю?

+casper+
02.03.2010, 01:44
НTL, скорость зависит от твоей машины.

OdaN
10.03.2010, 12:33
Подскажите, плз. Нужен sql запрос в мускуль, который будет возвращать даты за определенный интервал. Чтобы было понятнее - сейчас пользуюсь таким запрсом:


SELECT date
FROM (
SELECT curdate()-interval 4 day AS date
UNION ALL SELECT curdate()-interval 3 day
UNION ALL SELECT curdate()-interval 2 day
UNION ALL SELECT curdate()-interval 1 day
UNION ALL SELECT curdate()
UNION ALL SELECT curdate()+interval 1 day
UNION ALL SELECT curdate()+interval 2 day
UNION ALL SELECT curdate()+interval 3 day
UNION ALL SELECT curdate()+interval 4 day
) as t
Но нужно более гибкое решение, чтобы можно было проще менять количество дней до\после curdate()

Pashkela
10.03.2010, 13:44
Плюс к дате:

select adddate(curdate(),rownum) ddate from (select @r:=@r+1 rownum, t.* from (select @r:=0)a, information_schema.tables t where @r < datediff('2010-02-01','2010-01-10'))x

минус к дате:

select adddate(curdate(),-rownum) ddate from (select @r:=@r+1 rownum, t.* from (select @r:=0)a, information_schema.tables t where @r < datediff('2010-02-01','2010-01-10'))x

datediff('2010-02-01','2010-01-10')

тут задается кол-во дней + требуется так называемая "большая таблица", в которой записей не меньше, чем кол-во дней, в пример взята information_schema.tables

http://www.sql.ru/Forum/actualthread.aspx?tid=667216&hl=adddate

OdaN
10.03.2010, 14:39
А возможно без больших таблиц?
Считать rownum каким нибудь циклом, или вроде того?
Ведь если мне понадобится посчитать до числа большего чем кол-во строк в "большой таблице" (она ведь не бесконечна), то будет ошибка...

В любом случае спасибо и за это =)

b3
10.03.2010, 14:42
каким запросом делать поиск по колонке?? мне например нужно проверять есть ли значение в базе или нет, если нет то записать, а если есть удалить. как наваять такую ф-ю?

if($db->num_rows($db->query("SELECT * FROM users WHERE login='$_POST[login]';")) > 0) {
echo 'login exists';
exit;
}

m0Hze
20.03.2010, 10:49
Наверное глупый вопрос,но Sql это моя слабая сторона(одна из многих :)), а вопрос собственно такой:
Как с помощью одного запроса update отредактировать 2 записи.То есть, хочу что то вроде:

UPDATE table SET col=val WHERE id=1 and WHERE id=2;

Должно получиться так,что бы отредактировалась и 1 и 2 записи.такой вот запрос есесно непрокатывает,а гугл предлагает только запросы с if-then, что я думаю тут использовать не кошерно, и будет проще составить 2 запроса.А 2 запроса составлять не хочу,ибо данные редактируютсья одинаковые,лишний код,ну вы понеле.
Может под-запросом,мили исчо как измудрится?

VDShark
20.03.2010, 12:24
Наверное глупый вопрос,но Sql это моя слабая сторона(одна из многих :)), а вопрос собственно такой:
Как с помощью одного запроса update отредактировать 2 записи.То есть, хочу что то вроде:

UPDATE table SET col=val WHERE id=1 and WHERE id=2;

Должно получиться так,что бы отредактировалась и 1 и 2 записи.такой вот запрос есесно непрокатывает,а гугл предлагает только запросы с if-then, что я думаю тут использовать не кошерно, и будет проще составить 2 запроса.А 2 запроса составлять не хочу,ибо данные редактируютсья одинаковые,лишний код,ну вы понеле.
Может под-запросом,мили исчо как измудрится?

Давай всмотримся и вдумаемся в то, что ты написал.
Итак, грубые приближения:
1) ключевое слово WHERE... Оно одно, после него должен идти предикат;
2) "id = 1 AND id = 2".Т.е. id одновременно должен быть равен и 1, и 2. Немного странно, неправда ли? Думаю уместнее будет дизъюнкция :)

Учитывая вышеизложенное, можем составить запрос:
UPDATE table SET col=val WHERE id=1 OR id=2;
Уже должно работать... Но выглядит как то странновато, не правда ли? Особенно на больших наборах данных. Для подобных ситуаций был придуман оператор IN:
UPDATE table SET col=val WHERE id IN(1,2)

m0Hze
20.03.2010, 12:26
Давай всмотримся и вдумаемся в то, что ты написал.
Итак, грубые приближения:
1) ключевое слово WHERE... Оно одно, после него должен идти предикат;
2) "id = 1 AND id = 2".Т.е. id одновременно должен быть равен и 1, и 2. Немного странно, неправда ли? Думаю уместнее будет дизъюнкция :)

Учитывая вышеизложенное, можем составить запрос:
UPDATE table SET col=val WHERE id=1 OR id=2;
Уже должно работать... Но выглядит как то странновато, не правда ли? Особенно на больших наборах данных. Для подобных ситуаций был придуман оператор IN:
UPDATE table SET col=val WHERE id IN(1,2)
Я or не пробывал потому,что это или, и я думал оно исключающее ,Ж(
Спосебя)

InfectedM
20.03.2010, 21:42
Нужно соеденить поля кабинетов и поля должностей в таблице сотрудник.
Подскаите плиз в чем ошибка?

select adres,telefon,fio,id_dolzhnost,nomerKabineta from sotrudnik
left join (kabinet,dolzhnost) on
(kabinet.id_kabinet = sotrudnik.id_kabinet AND dolzhnost.id_dolzhnost = sotrudnik.id_dolzhnost)

синтаксис еще плохо знаю...ругается на запятую :confused:

Konqi
20.03.2010, 22:07
поставь пробелы после запятых

InfectedM
20.03.2010, 22:14
не помогло.
ps mssql 2000

Konqi
20.03.2010, 22:18
а какую именно ошибку выдает ?

InfectedM
20.03.2010, 22:31
General SQL error Line1: Incorrect syntax near ','.

Konqi
20.03.2010, 22:39
ты постил часть запроса,можешь весь запрос простит?

InfectedM
20.03.2010, 22:44
одно поле объединяется,все ок:
select *
from sotrudnik left join kabinet on (kabinet.id_kabinet = sotrudnik.id_kabinet)

Два поля не хочет почему-то...

select * from sotrudnik
left join (kabinet,dolzhnost) on
(kabinet.id_kabinet = sotrudnik.id_kabinet AND dolzhnost.id_dolzhnost = sotrudnik.id_dolzhnost)

думаю косяк в синтаксисе,не могу найти примеры двойные соединения нигде в нете ,не с чем сравнить(((

Konqi
20.03.2010, 22:51
может быть поможет...

http://www.softmatics.ru/sql/1.htm

http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=732371

InfectedM
20.03.2010, 23:08
вопрос решен....

select * from sotrudnik left join kabinet on kabinet.id_kabinet = sotrudnik.id_kabinet
left join dolzhnost on dolzhnost.id_dolzhnost = sotrudnik.id_dolzhnost

Architek86
27.03.2010, 20:41
Дана база пользователей (users) : userid, name, email
Дана база их обьявлений (listings) : id, author (в этом поле содержиться userid автора), text, glamur, redcent, refresh
Последние 3 поля (т.е. glamur, redcent, refresh) содержат либо 1, либо 0.

Пытаюсь сделать статистику пользователей.
Для этого делаю запрос mysq_query("SELECT * FROM users LIMIT 100"), т.е. вывожу к примеру первые 100 пользователей.
Как можно усложнить запрос так, что бы он для каждого пользователя смотрел ВСЕ их обьявления в базе listings, и, если находит хотя бы одно обьявление с полем glamur, равным 1, то к данной строчке в результате запроса прибавляется это поле с его результатом, то же самое мне нужно и для redcent и для refresh.

Т.е. я хотел бы, что бы было так:

$q = mysql_query('тут некий волшебный запрос, который мне нужен');
while($r=mysql_fetch_assoc){
массив $r как минимум будет содержать:
$r['userid'] == id пользователя
$r['glamur'] == 1, если хоть одно его обьявление содержит поле glamur с 1, иначе 0
$r['redcent'] и $r['refresh'] == аналогично как для glamur.
}

Как сделать так???

SeNaP
01.04.2010, 02:16
Сколько Мб может хранить бд MySQL на обычном виртуальном хостинге?
Или у каждого хостера по своему?

phpdreamer
01.04.2010, 09:12
Сколько Мб может хранить бд MySQL на обычном виртуальном хостинге?
Или у каждого хостера по своему?
у каждого хостера по своему

DeMoN_2009
02.04.2010, 09:09
$stat=mysql_query("SELECT hp FROM qwerty");
ошибка
Resource id #4
че не так?

phpdreamer
02.04.2010, 09:27
может
SELECT `hp` FROM `qwerty` WHERE `id`=4 LIMIT 1

или тебе нужны все записи? тогда
SELECT `hp` FROM `qwerty` LIMIT 0,100500
(100500 - сколько нужно)

VDShark
02.04.2010, 10:03
$stat=mysql_query("SELECT hp FROM qwerty");
ошибка
Resource id #4
че не так?
Это не ошибка.
mysql_query возвращает указатель на ресурс с результатом (собственно тот самый Resource id #4).
Что бы получить сами данные, необходимо воспользоваться другими функциями. Почитай про:
mysql_result (http://ru.php.net/manual/en/function.mysql-result.php)
mysql_fetch_array (http://ru.php.net/manual/en/function.mysql-fetch-array.php)
mysql_fetch_assoc (http://ru.php.net/manual/en/function.mysql-fetch-assoc.php)

DeMoN_2009
02.04.2010, 10:08
VDShark
ок)

DeMoN_2009
02.04.2010, 11:51
да.... можете кто сделать... необходим запрос к бд взять значение, потом обновление его в бд))
и... sql сделайте)))) я долго буду мучаться сам...

DeMoN_2009
02.04.2010, 14:23
хм...
$query = mysql_query("SELECT 'id' FROM 'qwerty' WHERE 'id' LIMIT 0,1");
$stat = mysql_result($query, "id");

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in

DeMoN_2009
02.04.2010, 14:25
Структура таблицы `qwerty`
--

CREATE TABLE `qwerty` (
`id` int(100) NOT NULL default '100',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `qwerty`
--

INSERT INTO `qwerty` VALUES (23);
INSERT INTO `qwerty` VALUES (30);
INSERT INTO `qwerty` VALUES (36);
INSERT INTO `qwerty` VALUES (48);
INSERT INTO `qwerty` VALUES (50);
INSERT INTO `qwerty` VALUES (64);
INSERT INTO `qwerty` VALUES (455);

Konqi
02.04.2010, 14:28
хм...
$query = mysql_query("SELECT 'id' FROM 'qwerty' WHERE 'id' LIMIT 0,1");
$stat = mysql_result($query, "id");

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in

Попробуй так

$query = mysql_query("SELECT 'id' FROM 'qwerty' WHERE 'id'='{$id}' LIMIT 0,1") or die (mysql_error());
while ( $result=mysql_fetch_assoc($query))
{
echo "<br>";
var_dump($result);
echo "<br>";
}

DeMoN_2009
02.04.2010, 16:17
Konqi
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''qwerty' WHERE 'id'='' LIMIT 1' at line 1

Failure
02.04.2010, 16:30
не пробовал почитать на mysql.com (http://dev.mysql.com/doc/refman/5.0/en/select.html) вместо того что бы колупаться? =\

<?php
......
$query = mysql_query("SELECT id FROM `qwerty` WHERE id='{номер}' LIMIT 0,1");
while($row = mysql_fetch_assoc($query)) {
echo $row['id'];
}
.......
?>

DeMoN_2009
02.04.2010, 17:57
мое нифига не работает)

namak
03.04.2010, 12:33
можно ли так делать?:


$fio = "Иванов Иван Иванович";
$result3 = mysql_query ("INSERT INTO client (fio) VALUES ('$fio')");
// внесли в таблицу ФИО, там ID автоматом сгенерировался. и далее так
$result2 = mysql_query("SELECT * FROM client WHERE fio='$fio'",$db);


так делать можно или нет?
мне надо сразу внести ФИО и вывести его ID

phpdreamer
03.04.2010, 13:25
если поле id есть в таблице и оно auto_increment, то с id все будет ок...
только не забывайте про защиту от sql injection

namak
03.04.2010, 15:20
если поле id есть в таблице и оно auto_increment, то с id все будет ок...
только не забывайте про защиту от sql injection

id явлся auto_increment
будем тестить значит

а как защититься от иньекций?

phpdreamer
03.04.2010, 17:00
$fio = mysql_real_escape_string("Иванов Иван Иванович");

Architek86
04.04.2010, 13:59
mysql_query("UPDATE `puppy_listings` SET `time`= '".time()."', `uptime` = '".time()."', `auto_refresh` = `auto_refresh` - 1 WHERE `auto_refresh` != '0' AND `chas_refresh` = '".date('Hi')."'");

Как запрос дополнить так, что бы обновление полей `time`='".time()."', `uptime` = '".time()."' было не только при условии `auto_refresh` != '0' AND `chas_refresh` = '".date('Hi')."'", но и при обязтельном условии `state` != 'closed' ?

phpdreamer
04.04.2010, 14:25
WHERE `auto_refresh` != '0' AND `chas_refresh` = '".date('Hi')."' AND `state` != 'closed'

Architek86
04.04.2010, 15:29
phpdreamer, а ничего, что обновление поля `auto_refresh` = `auto_refresh` - 1 должно происходить вне зависимости от `state` != 'closed' ?

Нашёл решение, вот оно:
UPDATE puppy_listings
SET `time`= if(state != 'closed', '".time()."', `time`),
uptime = if(state != 'closed', '".time()."', uptime),
auto_refresh = auto_refresh - 1
WHERE auto_refresh != '0' AND chas_refresh = '".date('Hi')."'

^_WhitE_DeMoN_^
08.04.2010, 18:56
Юзаю Mihalism Multi Forum Host + phpBB 3.0.7-PL1, пытаюсь передать базе (MySQL, COLLATE=utf8_bin) данныe на кириллице, но как не крути (енкодинг базы и файлов) - всегда вылазят йероглифы :mad:

Подозирою что виноваты скрипты работы с базой...
Но знаний по MySQL не хватает.

database.php:

<?php

class mfhclass_mysql_driver
{
function connect($host = "localhost", $username, $password, $database, $new_link = NULL)
{
global $mfhclass;
$connection_id = mysql_connect($host, $username, $password, true);

if (is_resource($connection_id) == false) {
$this->error();
} else {
if (mysql_select_db($database, $connection_id) == false) {
$this->error();
} else {
if (is_resource($this->root_connection) == false) {
$this->root_connection = $connection_id;
} else {
if ($mfhclass->funcs->is_null($new_link) == false) {
if (is_array($this->alt_connections) == true) {
$this->alt_connections = array();
}
$this->alt_connections[$new_link] = $connection_id;
}
}
}
}

return $connection_id;
}

function close()
{
if (is_resource($this->root_connection) == true) {
mysql_close($this->root_connection);
}

if (is_array($this->alt_connections) == true) {
foreach ($this->alt_connections as $id => $connection) {
mysql_close($this->alt_connections[$id]);
}
}
}

function set_database_connection($database_id = 1) {
global $mfhclass;
if ($database_id != 1 && $mfhclass->funcs->is_null($database_id) == false) {
$database_info = $this->fetch_array($this->query("SELECT * FROM `mfh_forum_databases` WHERE `database_id` = '{$database_id}';"));
$this->connect($database_info['sql_host'], $database_info['sql_username'], $database_info['sql_password'], $database_info['sql_database'], $database_info['database_id']);
}
}

function query($query, $connection_id = NULL)
{
global $mfhclass;
if (is_resource($this->root_connection) == false) {
$this->connect($mfhclass->info->config['sql_host'], $mfhclass->info->config['sql_username'], $mfhclass->info->config['sql_password'], $mfhclass->info->config['sql_database']);
}

$query = str_replace("<# QUERY_LIMIT #>", ((($mfhclass->info->current_page * $mfhclass->info->config['max_results']) - $mfhclass->info->config['max_results']).", {$mfhclass->info->config['max_results']}"), $query);
if ($mfhclass->info->config['sql_tbl_prefix'] != "mmh_" && $mfhclass->funcs->is_null($mfhclass->info->config['sql_tbl_prefix']) == false){
$query = preg_replace("/mmh_(\S+?)([\s\.,]|$)/", ($mfhclass->info->config['sql_tbl_prefix']."\\1\\2"), $query);
}

if ($mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) {
$this->set_database_connection($connection_id);
if (is_resource($this->alt_connections[$connection_id]) == false) {
$this->error($query, "Unknown alternate connection id: {$connection_id}");
}
}

$this->query_result = mysql_query($query, (($mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) ? $this->alt_connections[$connection_id] : $this->root_connection));

if ($this->query_result == false) {
$this->error($query);
} else {
return $this->query_result;
}
}

function total_rows($query_id)
{
return mysql_num_rows($query_id);
}

function fetch_array($query_id, $result_type = MYSQL_ASSOC)
{
return mysql_fetch_array($query_id, $result_type);
}

function error_number()
{
global $mfhclass;
return (($mfhclass->funcs->is_null(mysql_error()) == false) ? mysql_errno() : "Unknown Error Number");
}

function error($query = "No Query Executed", $custom_error = NULL)
{
global $mfhclass;
$error_message = (($mfhclass->funcs->is_null($custom_error) == false) ? $custom_error : mysql_error());
$error_html = "\t\t\t<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
<title>MySQL Error</title>
<style type=\"text/css\">
* { font-size: 100%; margin: 0; padding: 0; }
body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 75%; margin: 10px; background: #FFFFFF; color: #000000; }
a:link, a:visited { text-decoration: none; color: #005fa9; background-color: transparent; }
a:active, a:hover { text-decoration: underline; }
textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; border: 1px dashed #000000; background: #FFFFFF; padding: 5px; background: #f4f4f4; }
</style>
</head>
<body>
<p>
<b>MySQL Driver Error</b>
<br /><br />
A MySQL error has occurred.
Please copy the output shown below and email it immediately to <a href=\"mailto:{$mfhclass->input->server_vars['server_admin']}\">{$mfhclass->input->server_vars['server_admin']}</a>.
<br /><br />
<textarea readonly=\"readonly\" rows=\"15\" cols=\"40\" style=\"width:500px;\">Time Encountered: ".date("F j, Y, g:i:s a")."\nIP Address: {$mfhclass->input->server_vars['remote_addr']}\rError: {$error_message}\nError Number: ".$this->error_number()."\nQuery Executed: {$query}</textarea>
</p>
</body>
</html>";
exit($error_html);
return;
}
}

?>


и часть от install_queries.php (импортируемые данные в ДБ):


<?php

...

$mfhclass->db->install_queries[] = "DROP TABLE IF EXISTS `{$mfhclass->input->post_vars['access_name']}_acl_groups`;";

...

$mfhclass->db->install_queries[] = "CREATE TABLE `{$mfhclass->input->post_vars['access_name']}_acl_groups` (
`group_id` mediumint(8) unsigned NOT NULL default '0',
`forum_id` mediumint(8) unsigned NOT NULL default '0',
`auth_option_id` mediumint(8) unsigned NOT NULL default '0',
`auth_role_id` mediumint(8) unsigned NOT NULL default '0',
`auth_setting` tinyint(2) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `auth_opt_id` (`auth_option_id`),
KEY `auth_role_id` (`auth_role_id`)
) CHARACTER SET `utf8` COLLATE `utf8_bin`
ENGINE=MyISAM ;";

$mfhclass->db->install_queries[] = "INSERT INTO `{$mfhclass->input->post_vars['access_name']}_acl_groups` (`group_id`, `forum_id`, `auth_option_id`, `auth_role_id`, `auth_setting`) VALUES (1, 0, 85, 0, 1);";

...

?>


Если в VALUES есть кириллица - она записывается йероглифами...

Спасибо что прочли до конца =) Сейчас - ПОМОГИТЕ !

ZnikiR
08.04.2010, 22:31
Вопрос как вывести пол users из базы использую left( right) join

таблица user
+------+---------------+---------+
| id | users | gender |
+----+---------------+-----------+
| 1 | Lesha | 1 |
| 2 | Pavel | 1 |
| 3 | Masha | 2 |
| 4 | Kolya | 1 |
+------+-------------+-----------+



таблица gender
+----+--------------+
| id | user_gend |
+----+--------------+
| 1 | мужик |
| 2 | девка |
+----+--------------+



SELECT users , user_gend FROM user LEFT JOIN gender ON
user.gender = gender.id


^^ так !!!
спасибо разобрался!

+
Добавлено

А как сделать так,чтобы скрипт сначала выбирал имя,а только потом уже вставлял пол?
То есть как объединить
Выборка из user_name затем уже left join

1)SELECT gender From user WHERE users = "Марина"

2)SELECT users , user_gend FROM user LEFT JOIN gender ON
user.gender = gender.id

Ответ SELECT users , user_gend FROM user LEFT JOIN gender ON
user.gender = gender.id WHERE user.users = "Марина"

А вообще смылс это имеет?

Buffalon
09.04.2010, 14:23
Что делать
phpMyAdmin попытался соединиться с сервером MySQL, но сервер отверг соединение. Проверьте имя хоста, пользователя и пароль в config.inc.php.

InfectedM
10.04.2010, 16:45
подскажите плз как вывести на экран последнюю запись столбца таблицы ?

.:[melkiy]:.
10.04.2010, 16:59
подскажите плз как вывести на экран последнюю запись столбца таблицы ?

SELECT column,column2,column3 FROM table ORDER BY id DESC LIMIT 1

Pashkela
10.04.2010, 17:01
SELECT * FROM `table` WHERE id = (SELECT max(id) FROM table)

))

Stakanportvejna
10.04.2010, 23:31
предысловие:
на одном сайте есть скрипт голосования...выводиться там таблица такого вида " № регистрации Учреждение образования Адресс сайта Сумма баллов Средний балл Поставить оценку(5 кнопочег с цифрами 1-5)".....когда нажимаешь на одну из них скрипту посылается запрос вида id=N&ball=5....при том что id=5%2B3&ball=5' выполняется нормально(от серва приходит ответ:"Спасибо за Ваше мнение!!!!<br>
Окно браузера закроется автоматически через 5 секунд
<script language="JavaScript">
<!-- hide
setTimeout("close()",5000);


// -->
</script>",значит ничего не фильтруется и можно провести скл-инжект,БД mysql...
помогите кто раскрутить инжект?

Me4Ta
12.04.2010, 12:37
Stakanportvejna, имхо наоборот таки проходит очистка переменных от всяких кавычек, если от серва приходит нормальный ответ.
Отпиши ссылку в ЛС, потыкаем.

Наёмник
15.04.2010, 15:46
Всем привет. У меня лежит одна база sql. Какой прогой её можно просмотреть? Её размер ~250mb

REBUUS
16.04.2010, 12:49
Всем привет. У меня лежит одна база sql. Какой прогой её можно просмотреть? Её размер ~250mb

phpMyAdmin, mysqlmeneger

Spy2ex
17.04.2010, 15:22
Такая проблема:
скачал движок установил, но после добавления новостей на русс. языке получаю иероглифы. Это кусок файла который был.

$sql[1] = "CREATE TABLE IF NOT EXISTS `ava_favourites` (\n"
. " `user_id` int(5) NOT NULL,\n"
. " `game_id` int(5) NOT NULL,\n"
. " KEY `user_id` (`user_id`),\n"
. " KEY `game_id` (`game_id`)\n"
. ") ENGINE=MyISAM DEFAULT CHARSET=latin1;";


Изменил кодировку:

$sql[1] = "CREATE TABLE IF NOT EXISTS `ava_favourites` (\n"
. " `user_id` int(5) NOT NULL,\n"
. " `game_id` int(5) NOT NULL,\n"
. " KEY `user_id` (`user_id`),\n"
. " KEY `game_id` (`game_id`)\n"
. ") ENGINE=MyISAM DEFAULT CHARSET=urt8;";


Когда добавляю новость через скрипт опять иероглиф. когда напрямую череpз phpmyadmin все нормально. (Наверное сам скрипт посылает данные в другой кодировке)
спасибо.

Failure
17.04.2010, 18:23
..CHARSET=urt8;

мб utf8?

Spy2ex
17.04.2010, 18:41
да опичатка. Но в зпросе utf8.

drLex
18.04.2010, 19:47
Не сразу заметил эту тему и создал новую

вот (http://forum.antichat.ru/thread197258.html)

Хелп ми!

mansoff
20.04.2010, 13:31
Не подскажете как сделать бэкап базы не имея доступа к Myphpadmin , есть только login\pass сайта, бэкап нужен на моём компе, грубо говоря слить базу, противозаконного ничего нет, просто не первый раз заказчик(их несколько) тупит, даёт только пароль от FTP, а на сайте нет phpmyadmin, там как-то лево через хостера конектиться надо

mysql.exe -h -u -p удачно коннектится извне

заранее спасибо

krypt3r
20.04.2010, 13:44
залить шелл и снять дамп через него. Либо заюзать mysqldump, раз есть доступ извне

mansoff
20.04.2010, 13:55
на mysqldump пишет консолька что нету прав =\

krypt3r
20.04.2010, 13:58
mysqldump.exe -h -u -p ?

mansoff
20.04.2010, 14:09
спасибо, помогло, я немного ступил :)

ZnikiR
20.04.2010, 23:38
Вопрос в следущем.
Делаю запрос
$ins_sql="INSERT INTO `ticket` ( `id` , `tema` , `autor` ) VALUES ('', '$tema', '$login');";
$ins_result=mysql_query($ins_sql) or die("INSERT failed : " . mysql_error());
Так как ID autoicrement,то я его не задаю.
Вопрос в следующем.
Можно ли узнать, не создавая еще один запрос, id куда была помещена запись?

krypt3r
21.04.2010, 06:52
mysql_insert_id()

d_x
21.04.2010, 10:47
Эта функция все равно получает LAST_INSERT_ID через запрос.
Если этот id нужен, чтобы потом его использовать в другом запросе, то оптимальнее будет так:


$ins_sql="INSERT INTO `ticket` ( `id` , `tema` , `autor` ) VALUES ('', '$tema', '$login');";
$ins_result=mysql_query($ins_sql) or die("INSERT failed : " . mysql_error());

//тут идет какой-то другой запрос с использованием id предыдущего
mysql_query("insert into table (id) values (LAST_INSERT_ID())");

ZnikiR
22.04.2010, 23:56
У меня вопрос он возвращает последний id в данной таблице или вообще самый последний вставленный?
просто у меня две таблицы рядом.
и id таблицы ticket уменя испльзуется как связь с другой таблцией ticket_text.

Так назрел еще одни вопрос.
Скажите как настроить структуру поля,чтобы туда автоматически вставлялось UNIX_TIMESTAMP?

Stakanportvejna
24.04.2010, 23:19
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 1' at line 1
а вот ошибка от базы данных когда ковычку подставляешь после переменной,это значит что можно провести sql-иньекцию?

DiHWO
26.04.2010, 11:09
Stakanportvejna, да
ZnikiR, последний id этой таблицы

Nightmarе
26.04.2010, 16:06
Помогите разобраться с такой вещью....
В общем мне надо сделать одну операцию.
Есть база данных форума-воблы, мне нужно всю информацию в базе заменить на бинарный текст рандомного порядка, только тут есть 2 вещи.
1) саму структуру БД (название таблиц, и колонок) оставить без изменений.
2) весь текст заменить на рандомный бинарный текст, но только чтобы кол-во символов было столько-же сколько и изначально. то есть например ID пользователя 1 имеет 1 символ, а ID=10 два символа. тоже самое и с текстом (этот второй пункт не обязателен, но желателен).
Может кто помочь кодом или запросом SQL ???

~EviL~
27.04.2010, 23:22
Кто-то может мне помочь с оптимизацией SQL запроса:

SELECT movie.id, movie.title
FROM movie INNER JOIN movieawards ON movie.id = movieawards.movie_id
WHERE movieawards.award_name = 'Oscar'
GROUP BY movie.id, movie.title
HAVING COUNT(*) > 1

UNION

SELECT movie.id, movie.title
FROM movie INNER JOIN peopleawards ON movie.id = peopleawards.movie_id
WHERE peopleawards.award_name = 'Oscar'
GROUP BY movie.id, movie.title
HAVING COUNT(*) > 1 ;


movie.id, movieawards.movie_id, movieawards.award_name - primary keys;
movie_id, award_name - composed primary key.

movie: ID (PK), title, rating, format, country, ... , ProdID;
movieawards: movie_id (PK), award_name (PK), year, category;
peopleawards: movie_id (PK), P_ID (PK), award_name (PK), year, category.

*(PK) - Primary Key.

НTL
28.04.2010, 18:41
Как из mySQL вывести "топ-10" столбца??? (Int)

$now
28.04.2010, 19:20
НTL
SELECT `colname`FROM `tablename`ORDER BY `colname` DESC LIMIT 0, 10

где colname имя слобца, tablename имя таблицы

Rejiser
28.04.2010, 19:38
Произошла неприятная ситуация.
Кто-то знав пароль от фтп, зашел и удалил все домены с фтп.
Осталась БД от сайта и форума, сайт был на DLE, форум IPB, если я заного залью DLE, заного запустив установку, указал старую БД, которая есть в mysql, сотрутся-ли все записи в ней? или нет? как лучше поступить? А то техпо уже 2й день не отвечает.
Копии БД на всякий случай сделал

djpasica
28.04.2010, 19:50
Произошла неприятная ситуация.
Кто-то знав пароль от фтп, зашел и удалил все домены с фтп.
Осталась БД от сайта и форума, сайт был на DLE, форум IPB, если я заного залью DLE, заного запустив установку, указал старую БД, которая есть в mysql, сотрутся-ли все записи в ней? или нет? как лучше поступить? А то техпо уже 2й день не отвечает.
Копии БД на всякий случай сделал

залей файлы от ДЛЕ и от IPB прописав дание от БД в sys файлах

Rejiser
28.04.2010, 19:54
djpasica, т.е без повторной установки? просто указав все в файлах? я просто ззнаю 2 файла где конфиги пишутся, а может там есть еще?
И еще вопрос, как создать каталог с сайтом на фтп? домен в панели привязан, но как его привязать к каталогу?

$now
28.04.2010, 21:01
Rejiser
Конфиг хранится в одном файле.

По поводу поддомена - положите в корень сайта файл .htaccess с примерно таким содержанием


RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^forum\.domain\.ru$
RewriteCond %{REQUEST_URI} !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]


domain.ru - ваш домен (заметте экранировать точки бэкслэшами обязательно), forum - поддомен, он же имя папки

А далее в админке хостинга нужно позаботится что бызапросы на все поддомены приходили на ваш сайт (обычно по умолчанию так и есть.)

Rejiser
28.04.2010, 21:13
$now, спасибо, но форум у меня не был на поддомене. а имел адрес сайт.ру/forum
$now, а вы случайно не знаете, где в DLE этот самый файл лежит?

$now
28.04.2010, 21:18
$now, спасибо, но форум у меня не был на поддомене. а имел адрес сайт.ру/forum

Я про то и говорю, после описанных махинаций форум будет виден по адресу forum.сайт.ру

Конфиг скорее всего носит название config.php двльше ищите поиском (у cебя на компе в папке dle)

Dark_cracker
28.04.2010, 21:50
как удалить одинаковые колонки в mysql
нашёл запрос delete from TABLE where itableindex not in (select distinct * from TABLE)
ну чёта он не работает (

VDShark
29.04.2010, 12:43
2 Dark_cracker
Одинаковые "колонки" (атрибуты) или одинаковые "строки" (кортежи)?
Попонятней пожалуйста, и побольше конкретики :)

InfectedM
30.04.2010, 15:29
Как увеличить значение ячейки на 1?
считывать значение ячейки ,делать $a++ потом опять записывать - долго...
может есть вариант получше?

Pashkela
30.04.2010, 15:53
update `users` set `point`= `point`+'1' where `id`='2';

НTL
01.05.2010, 09:52
Как используя только СУБД (MySQL) и phpmyadmin заполнить столбец всех записей случайными значениями?

Ответ:

UPDATE `tabel` SET `name` = MD5(RAND())

Dark_cracker
03.05.2010, 00:28
Одинаковые "колонки" (атрибуты) или одинаковые "строки" (кортежи)?
Попонятней пожалуйста, и побольше конкретики
имелось введу строки , с тем разобрался ну всёравно не откозался бы от ответа...

VDShark
03.05.2010, 14:05
имелось введу строки , с тем разобрался ну всёравно не откозался бы от ответа...
Если есть первичный ключ - особой проблемы не вижу. Берем по одному из дублирующихся, и удаляем кортежи с не совпадающими PK.
Если же его нет (мало ли кто, как и зачем проектировал) - то почему бы не наживать себе геморрой и не воспользоваться временными таблицами?

OdaN
04.05.2010, 17:34
Помогите плз с оптимизацией:
есть запрос:

select w.city,r.name as cityname,w.sunrise,w.sunset,w.date,w.dpart,w.type, w.winddir,w.windspd,w.pressure,w.dampness,w.obstim e,w.wcolor,w.temp,w.ncolor,w.ntemp,w.tomcolor,w.to mtemp,r.offset,
if (w.sunrise < date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s')
and w.sunset > date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s'),
timediff(w.sunset,date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s')),
if (date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s') > '00:00:00' and
date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s') < w.sunrise,
timediff(w.sunrise,date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s')),
addtime(timediff('23:59:59',date_format(date_sub(n ow(), interval (14400-(r.offset)) second),'%H:%i:%s')),w.sunrise))
) as `change`,
if (w.sunrise < date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s')
and w.sunset > date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s'),1,0) as lite,
date_sub(now(), interval (14400-(r.offset)) second) as `localtime`
from weather w left join regions r on w.city=r.city where w.city = $city order by w.id desc limit 1
Там часто используется выражения типа

date_format(date_sub(now(), interval (14400-(r.offset)) second),'%H:%i:%s'))

для получения локального времени. как можно все это загнать в переменную, и в принципе уменьшить запрос, хотя-бы для экономии трафика?

Используется тут: http://export.selaz.org/weather/


Структура таблиц:

CREATE TABLE IF NOT EXISTS `regions` (
`id` int(11) NOT NULL auto_increment,
`yanid` int(11) NOT NULL,
`city` int(11) NOT NULL,
`name` varchar(64) NOT NULL,
`offset` int(11) NOT NULL,
`weather` tinyint(1) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `yanid` (`yanid`),
UNIQUE KEY `city` (`city`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `weather` (
`id` int(11) NOT NULL auto_increment,
`city` int(11) NOT NULL,
`sunrise` time NOT NULL,
`sunset` time NOT NULL,
`date` date NOT NULL,
`dpart` tinyint(4) NOT NULL,
`type` varchar(32) NOT NULL,
`windspd` tinyint(4) NOT NULL,
`winddir` varchar(8) NOT NULL,
`pressure` smallint(6) NOT NULL,
`dampness` tinyint(4) NOT NULL,
`obstime` time NOT NULL,
`temp` tinyint(11) NOT NULL,
`wcolor` varchar(6) NOT NULL,
`ncolor` varchar(6) NOT NULL,
`ntemp` tinyint(4) NOT NULL,
`tomcolor` varchar(6) NOT NULL,
`tomtemp` tinyint(4) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `city` (`city`,`date`,`obstime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

dokwill
05.05.2010, 11:27
помогите составить запрос к бд

есть таблица "data " в ней столбец "ALT" в этой таблице 35000 строк
Нужно заменить все данные столбца "ALT" для всех сторок и вставить значение по порядку от 1 - 35000. Как это сделать.
как то так ?
Update "data"

MotoR
05.05.2010, 23:38
помогите составить запрос к бд

есть таблица "data " в ней столбец "ALT" в этой таблице 35000 строк
Нужно заменить все данные столбца "ALT" для всех сторок и вставить значение по порядку от 1 - 35000. Как это сделать.
как то так ?
Update "data"

"UPDATE data SET ALT='$i' WHERE id='$i'"

где значение переменной $i от 1 до 35000, перебор осуществляется в цикле.

Doom123
12.05.2010, 19:54
как проверить если в таблице table1 есть запись с номером 1 в колонке id если есть то выбрать колонку value у id = 1, а если записи с id = 1 в table1 нету выташить запись из table2 с id = 99? =)

зарание благодарен ))

Pashkela
12.05.2010, 20:15
SELECT * FROM table WHERE id=1 or id=99 limit 1

Doom123
12.05.2010, 20:49
Pashkela ты вообще вопросы читаешь или просто так от балды пишешь?

MotoR
12.05.2010, 21:13
как проверить если в таблице table1 есть запись с номером 1 в колонке id если есть то выбрать колонку value у id = 1, а если записи с id = 1 в table1 нету выташить запись из table2 с id = 99?

Если я правильно понял, то будет приблизительно вот так:

<?php
$query = "SELECT value FROM table1 WHERE id =1";
$query1 = "SELECT value FROM table2 WHERE id =99";
if ($result = mysql_query($query)){
// дальнейшие необходимые действия, т.е. выполнилось первое условие существования записи в таблице tabel с id=1
}
else { $result = mysql_query($query1);
// дальнейшие необходимые действия, т.е. выполнилось второе условие существования записи в таблице tabel2 с id=99
}
?>

Doom123
12.05.2010, 21:15
MotoR :D до этого я бы и сам додумылся мне нужен 1 запрос )

MotoR
12.05.2010, 21:24
Ну а что мешает объединить эти два запроса через логическое "или" (OR) ?

l1ght
12.05.2010, 21:30
Pashkela ты вообще вопросы читаешь или просто так от балды пишешь?
select * from t1,t2 where t1.id=1 or t2.id=99 limit 1

Pashkela
12.05.2010, 23:18
Pashkela ты вообще вопросы читаешь или просто так от балды пишешь?

Сорри, не увидел просто сразу, что таблы разные, l1ght поправил)

Doom123
13.05.2010, 08:28
проблема что все предлогаеют выбрть сразу из 2ух таблиц а мне нада сначала проверить если в 1ой есть а если нету там то со второй выбрать ...

krypt3r
13.05.2010, 08:57
Возможно, так

SELECT CASE WHEN EXISTS (SELECT * FROM table1 WHERE id = 1)
THEN (SELECT value FROM table1 WHERE id = 1)
ELSE (SELECT value FROM table2 WHERE id = 99) END;

НTL
13.05.2010, 16:06
Как выбрать все записи у которых в определенном столбце нету точки

Failure
13.05.2010, 16:28
SELECT * FROM `table` WHERE `column` NOT LIKE '%.%';

Demon1X
17.05.2010, 09:34
тут вчера обзор цмсок читал
http://habrahabr.ru/blogs/webdev/92607/
встретил пару таких перлов
На версии 2.8.0 можно было в определённые моменты (при обращении к архиву крупного сайта) увидеть 12 000 запросов к базе.

Китайское поделие. Сразу впечатление: первый заход на морду дал 30 запросов к базе данных, а следующий — 4. К памяти тоже весьма экономно относится. Т.е. забота о производительности, кэширование… Первый заход в админку дал 28 запросов.

Вопрос как они подсчитывают количество запросок генерируемых скриптом к БД?

Можно конечно написать скриптик который будет парсить скрипт на количество запросов переходить на включаемые в него др. скрипты и там подсчитывать вызовы тоже. Но я так понимаю есть куда более изящное решение?

phpdreamer
17.05.2010, 19:53
а посмотри например в http://cogear.ru/ внизу страницы...

если CMS написана на фреймворке, то статистические данные не проблема

Demon1X
19.05.2010, 01:15
если CMS написана на фреймворке, то статистические данные не проблема

а иначе тогда узнать кол-во запросов, можно только вышеозначенным мною способом?

ultimatum
19.05.2010, 02:55
Незнал что можно делать условия в запросе.

SELECT CASE WHEN EXISTS (SELECT * FROM table1 WHERE id = 1)
THEN (SELECT value FROM table1 WHERE id = 1)
ELSE (SELECT value FROM table2 WHERE id = 99) END;

Сколько здесь запросов к/в базе?

krypt3r
19.05.2010, 07:10
Можно. Запросов к БД два

Chaak
22.05.2010, 12:54
http://s005.radikal.ru/i212/1005/cd/0f217acb4187.jpg
В этом же запросе необходимо определить кол-во программ, созданных разработчиками.

Pashkela
24.05.2010, 14:28
чото типо:

SELECT
Производители.[Название производителя],Производители.[Номер производителя],Производители.[Рейтинг], COUNT(Программы.[Название программы]) AS AllProg
FROM
Производители
INNER JOIN
Программы ON Производители.[Номер производителя] = Программы.[Номер производителя]
GROUP BY
Производители.[Название производителя],Производители.[Номер производителя],Производители.[Рейтинг];

Chaak
24.05.2010, 14:53
Блин.. пробывал ошибку писало. Спасибо.

truelamer
30.05.2010, 14:32
Всем привет, помогите разобраться. У меня есть таблица в которую каждые 1-3 секунды поступают данные причем предыдущие данные должны быть удалены перед вставкой или их значение должны быть обновлены. как мне лучше это реализовать? есть идея о том что значало делать транкейт таблицы а потом просто вставку объединенным инсертом, update мне кажется бдет наиболее тормозным вариантом. Так вот если делать сначало транкейт а потом сразу инсерт не получится ли ситуация что в это время между этими процессами пролезет запрос а таблица пуста, запросы к таблице тоже очень часто идут. подскажите вариант

Failure
30.05.2010, 15:06
http://php.net/manual/en/function.mysql-pconnect.php
truncate и insert выполняются намного быстрей чем за 1-3 секунды, так что думаю всё должно быть норм

InfectedM
02.06.2010, 00:11
1|1|11
2|2|11
3|44|1

select count(id_tovar) as qwerty from sklad where id_type_spares = 1 AND id_spares = 1 AND diller=111111111111


значения 111111111111 не существует...

ввожу этот запрос в PHPmyadmin выводит 0
почему ПХП пишет что 2,елси ответ 0 ?
в чем может быть косяк?


$query = mysql_query("select count(id_tovar) as qwerty from sklad where id_type_spares = ".$_GET['add_id_type_spares']." AND id_spares = ".$_GET['add_id_spares']);

echo("select count(id_tovar) as qwerty from sklad where id_type_spares = ".$_GET['add_id_type_spares']." AND id_spares = ".$_GET['add_id_spares']." AND diller = ".$_GET['diller']);
echo('<br><br><br>');
$userdata = mysql_fetch_assoc($query);
$povtor=$userdata['qwerty'];

echo($povtor);

FindeR
02.06.2010, 03:51
InfectedM, а ты ничего не забыл?

$query = mysql_query("select count(id_tovar) as qwerty from sklad where id_type_spares = ".$_GET['add_id_type_spares']." AND id_spares = ".$_GET['add_id_spares']);
Где тут diller-то?
Видимо, так должно быть...
$query = mysql_query("select count(id_tovar) as qwerty from sklad where id_type_spares = ".$_GET['add_id_type_spares']." AND id_spares = ".$_GET['add_id_spares']." AND diller='чё-то там');

InfectedM
02.06.2010, 09:21
блин точно.
спс)
сонный был и спутал запрос с echo по тупости)

Firax
02.06.2010, 23:18
Добрый вечер.

Уменя такой вопрос у меня БД библиотека есть таблица выдачи книг и я там указываю число когда читатель должен вернуть книгу, как сделать что бы он автоматически перекидывался в таблицу должнеков когда он просрочит срок возвращения книги ?

Зарание спасибо.

FindeR
03.06.2010, 01:06
Может, немного не в тему ответ, но...зачем заводить ещё одну таблицу под должников? У тебя же уже есть таблица с читателями. У каждого имеется дата возврата книги. Вот и выводи тех, у кого дата возврата > текущей.

Failure
04.06.2010, 02:25
=\
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff
http://php.net/manual/en/function.mysql-fetch-assoc.php

FindeR
04.06.2010, 02:46
Подскажите плиз, как вытащить разницу во времени в переменную?

Тогда уж:


$query ="SELECT TIMEDIFF(NOW(), datetime) as diff FROM log";
$result = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_assoc($result))
{echo $row["diff"];}

ZenstatioN
04.06.2010, 03:16
Тогда уж:


$query ="SELECT TIMEDIFF(NOW(), datetime) as diff FROM log";
$result = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_assoc($result))
{echo $row["diff"];}

Cпасибо, то что надо :)

Firax
04.06.2010, 13:55
FindeR, ну мне на них еще штрафы накладывать надо и в бан ставить если нарушили правила.

FindeR
04.06.2010, 15:06
Firax, я бы всё равно не стал плодить таблицы.
Добавил бы поле banned (smallint 1), debtor (smallint 1)..ну и поле penalty.

Потом кроном проходился, например, раз в сутки по таблице. Если у кого-то дата просрочена - ставим ему в debtor единицу, ну и в penalty определённый штраф записываем.
Если кого-то нужно забанить - в banned единицу.

Jed7777
07.06.2010, 23:32
Я импортировал в бд таблицы скриптом а они отображаются как "????????", то есть неправильная кодировка. Не могу это исправить.
mysql_query('SET NAMES cp1251'); не помогает.

b3
08.06.2010, 18:56
Вставляю в БД примерно 20 тыс строк, длинна трок небольшая, всего лишь прокси и страна, вставляеться оч медленно, минут 5. В чем может быть причина?
ЗЫ сервер mysql на локалхосте, возможно изза малого объема оперативы? Ось вин7 свободной оперативы 100мб )))))


Сервер: localhost (MySQL host info: localhost via TCP/IP)
Версия сервера: 5.1.36-community-log
Версия протокола: 10

namak
08.06.2010, 19:06
где можно посмотреть пример использования GROUP BY, HAVING, чтобы все подробно было расписано. а не заумными словами.
желательно с примером использования.

GrandMaster
08.06.2010, 19:14
Ось вин7 свободной оперативы 100мб )))))
Маловато, конечно, оперативки.
где можно посмотреть пример использования GROUP BY, HAVING, чтобы все подробно было расписано. а не заумными словами.
желательно с примером использования.
http://www.citforum.ru/database/sql_kg/2-5-3.shtml

Failure
08.06.2010, 19:14
http://www.mysql.ru/docs/man/Group_by_functions.html :eek:

InfectedM
09.06.2010, 01:57
http://s59.radikal.ru/i166/1006/fb/431a9d4c20ba.jpg

в таблице есть поле поставщик


нужно вывести из этой таблицы поставщиков что бы они не повторялись.
тоесть результат должен быть такой:
стеклайн
стеклито


Не актульно,вопрос решен

Firax
09.06.2010, 21:42
Подскажи те плиз как хотя примерно писать запросы с датами. БД на MySQL/

Как например сделать запросы 1. вывести задолжников со сроком более 10 дней на данном пукте выдочи
или

2.Получить перечень и общие число книг поступивших и утреяных за последний год для данного читательно зала.

Подскажите плиз как писать запросы с датами :(

Ponchik
10.06.2010, 07:28
Ищу такую функцию: Должна считать кол-во символов в строке
Смысле:
some_function('привет юзернейм','е') должно вернуть 3, потомучо в строке 3 буквы "е"
Есть такое?

LStr1ke
10.06.2010, 10:34
Ищу такую функцию: Должна считать кол-во символов в строке
Смысле:
some_function('привет юзернейм','е') должно вернуть 3, потомучо в строке 3 буквы "е"
Есть такое?
Нашел в гугле и немного видоизменил

function some_function($str,$key) {
$CharStat = array();
$TotalChars = StrLen($str);
for($a=0;$a<$TotalChars;$a++)
{
$ch = strtolower($str{$a});
if(array_key_exists($ch,$CharStat))
$CharStat[$ch]++;
else
$CharStat[$ch] = 1;
}
return $CharStat[$key];
}
echo some_function("привет юзернейм","е");

Ponchik
10.06.2010, 11:34
LStr1ke, тема пыха рядом, мне в MySQL :o
И мне родное, встроеное в мускуль надо
P.S. Если уже говорить о пыхе
<?php
$s = 'привет юзернейм';
str_replace('е',null,$s,$count);
echo $count; //3
?>
<тут был бред, просто я не сплю часов 18, пурепутол strlen и strval :( >

FindeR
10.06.2010, 16:02
Ponchik, так, что ли, хочешь?:)

SELECT (char_length('привет юзернейм') - char_length(REPLACE('привет юзернейм','е','')))


Кстати, если уж на пыхе - то проще уж

echo substr_count('привет юзернейм',"е");

Denssss
11.06.2010, 13:27
$base_name="base.spacenet.ru:4041";
$base_user="w_ftown";
$base_pass="vz4rkuBJ3p";
$db_name="w-ftown";

$db_name - это имя базы данных
юзер,пасс- понятно.
а что тогда $base_name ??

krypt3r
11.06.2010, 13:32
Хост с БД

Denssss
11.06.2010, 13:42
Хост с БД
если я на локалхосте, то так и писать "localhost"?

Ponchik
12.06.2010, 05:35
если я на локалхосте, то так и писать "localhost"?
localhost
или
localhost:3306
Просто там оно порт просит по ходу у тебя

++Norton++
15.06.2010, 14:06
Нужно удалить записи из 5 таблиц одним запросом. Делаю вот так:

DELETE FROM t1, t2, t3, t4, t5
USING table1 AS t1
LEFT JOIN table2 AS t2 ON t1.inst_id=t2.inst_id
LEFT JOIN table3 AS t3 ON t2.inst_id=t3.inst_id
LEFT JOIN table4 AS t4 ON t3.inst_id=t4.inst_id
LEFT JOIN table5 AS t5 ON t4.inst_id=t5.inst_id
WHERE t1.inst_id = 2

Запрос выполняется без ошибок, но удаление происходит только из table1.
Что не так?
Заранее спасибо!

Pashkela
15.06.2010, 14:27
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

Or:
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;


http://dev.mysql.com/doc/refman/5.0/en/delete.html

xlopchik
16.06.2010, 21:35
Помогите найти прогу для подстановки (sql инекций)