PDA

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


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

mff
11.03.2009, 18:59
Помогите с запросом:
$arr = DbQueryToArray("SELECT * FROM `products` WHERE `name` like '%".$search."%' ORDER BY `name`, `nal` DESC");

нужно выбрать из таблички всё, что совпадает со строкой поиска из столбца name и отсортировать по столбцу name и по столбцу nal - наличие, там может быть либо "0" либо "1", то есть есть в наличии и нет в наличии

Выше преведеннный запрос не работает :confused:

blaga
11.03.2009, 19:04
то есть нужно вывести только те что с нулем?
возможно так, не проверял.
SELECT * FROM `products` WHERE `name` like '%".$search."%' AND `nal`='1' ORDER BY `name` DESC

mff
11.03.2009, 19:17
blaga, с нулём в конце с еденицей в начале! А не только там где 0

То есть по названию по алфовиту, и те что есть в наличии (с еденичкой) в начале, постом по алфовиту и те что нету в наличии 0

VDShark
11.03.2009, 21:02
То есть по названию по алфовиту, и те что есть в наличии (с еденичкой) в начале, постом по алфовиту и те что нету в наличии 0

ORDER BY `nal` DESC,`name`

mff
11.03.2009, 21:51
ORDER BY `nal` DESC,`name`
Почему то не работает, всё по имени по алфовиту, но идут "есть в наличии" и "нет в наличии" в перемешку :confused: :confused: :confused: :confused: :confused: :confused: :confused: :confused:

VDShark
11.03.2009, 23:53
Почему то не работает, всё по имени по алфовиту, но идут "есть в наличии" и "нет в наличии" в перемешку :confused: :confused: :confused: :confused: :confused: :confused: :confused: :confused:
Странно... Я хоть и приболел, но мой больной разум выдал вроде бы правильную конструкцию (ибо она элементарна)... Дай дамп таблицы (если возможно) что бы можно было посмотреть что и как.

mff
12.03.2009, 00:35
Спасибо VDShark, всегда выручаешь! Вот дамп:
CREATE TABLE `products` (
`prodid` int(10) NOT NULL DEFAULT '0',
`podcatid` varchar(255) NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL DEFAULT '',
`price` float(11,2) NOT NULL DEFAULT '0.00',
`opis` text NOT NULL,
`catid` int(10) NOT NULL DEFAULT '0',
`podpodcatid` int(11) DEFAULT NULL,
`podpodpodcatid` int(11) DEFAULT NULL,
`price2` float(11,2) DEFAULT NULL,
`nal` varchar(255) DEFAULT NULL,
`opis1` text,
`art` varchar(255) NOT NULL DEFAULT '',
`nov` int(11) NOT NULL DEFAULT '0',
`ras` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`prodid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; :(

VDShark
12.03.2009, 10:40
mff Говоря дамп я имел ввиду с данными.. хотя нужно было уточнить конечно :) А то самому выдумывать не улыбается. Дай данных для теста чуток... Если не хочешь здесь палить - можешь стукнуться в аську или пм.

mff
12.03.2009, 14:38
VDShark, отпраил в пм. :)

VDShark
12.03.2009, 15:43
VDShark, отпраил в пм. :)
У меня по запросу

SELECT *
FROM `products`
WHERE `name` LIKE '%амул%'
ORDER BY `nal` DESC , `name`

все отлично отсортировало :) Показывай какой ты запрос пишешь.

mff
12.03.2009, 19:47
$arr = DbQueryToArray("SELECT * FROM `products` WHERE `name` like '%".$search."%' ORDER BY `nal` DESC,`name`");и
$count = DbQueryToArray('select count(*) from `products` WHERE `name` like "%'.$search.'%"');

VDShark
12.03.2009, 20:32
Выполни в консоли мускула и посмотри на результат... так же перемешанно или нет? Есть подозреие что ф-ция DbQueryToArray как то мешает результат (это что то самописное?).

Byrger
12.03.2009, 21:40
Какой тип данных в <L использовать для хранения чисел с точкой?

mff
12.03.2009, 22:05
Выполни в консоли мускула и посмотри на результат... так же перемешанно или нет? Есть подозреие что ф-ция DbQueryToArray как то мешает результат (это что то самописное?).Ага самаписное :) В общем запрос по идее правельный!? Буду смотреть глубже :) Спасибо!

OnArs
12.03.2009, 23:35
Здравствуйте!

Нужно сделать выборку из таблицы по условию:
если первый символ в значении cname равен числу ([0-9]).

Думаю, что должно выглядеть как то вот так:
SELECT * FROM cat_b WHERE cname LIKE '[0-9]%'

Поправьте меня пожалуйста, подскажите как правильно :rolleyes:

VDShark
12.03.2009, 23:52
Поправьте меня пожалуйста, подскажите как правильно :rolleyes:
Мыслиш в правильном направлении, но LIKE тут не проканает. Надо заюзать регулярку - благо мускул (как и постгре и некоторые другие) их нынче держит :)

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Примерно эт будет так

cname REGEXP '^[0-9].*'

OnArs
14.03.2009, 17:31
Здравствуйте.

Появился ещё один вопрос - Как правильно хранить дату в базе MySQL?

Подкиньте пожалуйста пример, как правильно занести в базу и какого типа должна быть эта база?

Мне нужно хранить в базе Дату Рождения, которую Я получаю в виде:
$d - день [в виде двух цифр - пример 02]
$m - месяц [в виде двух цифр - пример 12]
$y - год [в виде 4 цифр - пример 1985]

В phpMyAdmin есть тип таблицы DATE, в чём его отличие, на пример, от TINYTEXT?

Заранее благодарен, Большое Спасибо! :rolleyes:

VDShark
15.03.2009, 00:13
Здравствуйте.

Появился ещё один вопрос - Как правильно хранить дату в базе MySQL?

Подкиньте пожалуйста пример, как правильно занести в базу и какого типа должна быть эта база?

Мне нужно хранить в базе Дату Рождения, которую Я получаю в виде:
$d - день [в виде двух цифр - пример 02]
$m - месяц [в виде двух цифр - пример 12]
$y - год [в виде 4 цифр - пример 1985]

В phpMyAdmin есть тип таблицы DATE, в чём его отличие, на пример, от TINYTEXT?

Заранее благодарен, Большое Спасибо! :rolleyes:
Отличие DATE от того же TINITEXT в том, что ты можешь работать с датой на уровне СУБД (впринципе сможешь и с TEXT, только конвертить прийдется). Если тебе на стороне клиента дату разными способами отображать не приходится - то смело можешь хранить в формате DATE (либо DATETIME). Если же у тебя большое количество вариаций, то имхо лучше в СУБД хранить никс таймштамп и конвертить вне СУБД (тот же пых, или что ты там используешь) в нужный формат.

OnArs
15.03.2009, 11:08
Окей, а как потом работать с датой? Мне нужно будет делать выборки, например:
показать все записи с датой от 01.01.08 до 01.01.09

nilux
15.03.2009, 13:31
OnArs как то так =)

SELECT * FROM table WHERE date BETWEEN '01.01.08' AND ' 01.01.09'

OnArs
15.03.2009, 14:23
OnArs как то так =)

SELECT * FROM table WHERE date BETWEEN '01.01.08' AND ' 01.01.09'

Спасибо, а то собирался проверять через больше и меньше :)

OnArs
16.03.2009, 10:18
Подскажите: как правильно заносить в базу данные вроде Agent's Name, в строке встречается апостроф, поле в MySQL - TINYTEXT.

Сейчас решил, что можно делать через:
addslashes() при добавлении записи в базу и stripslahes() при выводе строки из базы, но не думаю, что это правильный путь, уверен что есть более удобный вариант.

Red_Red1
16.03.2009, 10:35
Для этого есть специальная функция
http://php.su/functions/?mysql_real_escape_string

andreipup
16.03.2009, 22:37
Проблема такая вот таблица

CREATE TABLE `text` (
`id` int(11) NOT NULL auto_increment,
`text` tinytext character set cp1251 NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `text` (`text`(28))
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ;



Вот нужно как то в ней увеличить текст при вставке

text`(28) пробовал увеличивать не помогло.

mff
17.03.2009, 02:05
Добей ты уже этот запрос)Спасибо, добил. Блин, короче ниже в коде, был еще один запрос. Там то и надо было делать изменения )

VDShark
17.03.2009, 09:54
andreipup
`text` text character set cp1251 NOT NULL
либо mediumtext, longtext и тп.
Вот их размеры

TINYBLOB, TINYTEXT L + 1 bytes, where L < 28
BLOB, TEXT L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT L + 4 bytes, where L < 232

[R]eD
18.03.2009, 12:17
Такой вопрос:

Есть например числа: 95.51613, 95.46654, 95.46578.
Если делать order by time, mysql будет учитывать числа после точки? Или только целое?

[x26]VOLAND
18.03.2009, 12:46
А самому попробовать никак?

eiti
18.03.2009, 17:58
на http://www.sql.ru/forum/ сказали, что варианты ответов не правильные. продублирую здесь.

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

1. Определение сервера приложений:
1. Определение активного сервера:
2. Определение файл-сервера:
4. Определение выделенного сервера:

a) Между клиентом и сервером вводится промежуточное звено, на котором размещается бизнес-логика и управление данными. Эту архитектуру называют также трехуровневой.
b) На сервере размещены файловая система, функционирующая под управлением сетевой ОС, и БД. Все остальные компоненты системы, включая СУБД, располагаются на машине клиента
c) На сервере размещены СУБД, БД и Управление данными. Работа идет по запросам клиента обычно на языке SQL.
d) На сервере размещены СУБД, БД, Управление данными и Элементы бизнес-логики (триггеры и хранимые процедуры).

мой вариант: 1-a, 2-d, 3-b, 4-c. и, кажется, я ошибаюсь. укажите, пожалуйста, где?

[R]eD
22.03.2009, 15:05
Была таблица (varchar(32)) со значениями 123.156, 5165.561 и т.д.
Сменил тип на int(32), пропали все значения после точки, есть возможность использовать int с числами после щапятой (с varchar проблемы с order by не правльно сортирует)? Он их попросту не сохраняет, только целые числа.

Помогите :).

nilux
22.03.2009, 15:33
[R]eD, INT испльзуется для целых чисел вот и пропали. Для чисел с точкой используются NUMERIC или DECIMAL, для большей точности DOUBLE. Ну смотри сам какой тип лучше подойдёт для и твоей СУБД.

[R]eD
22.03.2009, 16:27
Покапался, пробывал выставить разные типы, но всеравно с любым он отсикает число которое идет после точки =\

Chaak
22.03.2009, 16:43
Попробуй FLOAT/DOUBLE

[R]eD
22.03.2009, 16:58
Все, работает, спасибо.

je0n
23.03.2009, 17:30
хочу выбрать из таблицы ВСЕ значения, но без повторений по ОДНОМУ полю. How?

-=Static=-
23.03.2009, 17:53
хочу выбрать из таблицы ВСЕ значения, но без повторений по ОДНОМУ полю. How?

SELECT * FROM `Table` GROUP BY `field`

или конструкция:

SELECT DISTINCT

je0n
23.03.2009, 18:18
SELECT * FROM `Table` GROUP BY `field`

или конструкция:

SELECT DISTINCT
я эт все пробовал. Я,наверное, непонятно объяснил че нужно. В таблице сть первичный ключ id. Мне нужно выбрать последние 10 записей из таблицы. Но при этом, чтобы не было повторений по ОДНОМУ из полей (повторяющихся полей может быть много).
distinct отпадает сразу,потому что id полюбому будет разный, а он мне нужен тоже! И еще по причине, что повторяться может не только это поле, по которому нужно фильтровать.
А group by отпадает потому что если пишу group by id,my_field, оно выводит не последние добавления в таблицу, а по непонятной мне схеме, да и с повторениеми по нужному полю. Вот

Теперь, чтоб понятние было раскажу че за таблица. В ней хранятся информация о музыкальных альбомах. id,genre,artist,album,tracklist.....
Допустим исполнитель Iggy Pop, у него много альбомов. То есть уже есть куча полей с artist='Iggy Pop', далее Iggy Pop подходит под 2 жанра, т.е. genre='classic rock' и genre='punk'.Для каждого альбома получается две одинаковых строки с различием, только в жанрах.
А мне нужно выбрать 10 последних альбомов,но чтобы они не повторялись.

je0n
23.03.2009, 18:29
все... Я допер. Извиняюсь за беспокойство. Надо было так:
SELECT *
FROM table
GROUP BY album
ORDER BY id DESC
LIMIT 0 , 10

-=Static=-
27.03.2009, 16:50
Срочный вопрос!)

Есть таблица с полями
f1,f2,f3,f4,f5
как мне одним запросом можно сделать другой порядок, например:
f1,f2,f5,f4,f3

?????

что-то типа ALTER

-=Static=-
27.03.2009, 20:12
Именно в таблице колонки переставлять? ;) Не бред ли?

SELECT (f1 as f1, f2 as f2, f3 as f5, f4 as f4, f3 as f5) ....
подходит?

________________________________________
Или вот! ALTER TABLE name1 MODIFY name2 AFTER name3
name1 - имя таблицы
name2 - имя перемещаемого столбца
name3 - имя столбца, после которого вставить перемещаемый столбец.


Вот то, что ты написал по SELECT - бред.
да и ALTER - не работает.

А мне надо было переставлять столбцы в соответствии с конфигурацией.

Решение нашел. Вопрос закрыт.

Glazz
30.03.2009, 11:46
Эм.. с SQL сильно не знаком, но как можно хранить часть таблици в тексте, чтоб потом её залить в таблицу, при помощи COPY.
Т.е. мне нужно сделать примерно 300 вставок, и каждый раз писать INSERT как то не то.

groundhog
30.03.2009, 12:15
Glazz, во-первых, чтобы вставлять с файла тебе нужен будет файлприв, а давать файл прив на публичном веб-сервере - это гиблое дело. Не нужно так делать. Если это единчиная практика, то для этого давно изобрели:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name,...)]
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name,...)]


О чём вообще речь идёт? О MySQL?

Glazz
30.03.2009, 12:23
Glazz, во-первых, чтобы вставлять с файла тебе нужен будет файлприв, а давать файл прив на публичном веб-сервере - это гиблое дело. Не нужно так делать. Если это единчиная практика, то для этого давно изобрели:



О чём вообще речь идёт? О MySQL?
MySQL. Т.е. записывать данные в таблицу из файла? хм... а что в качестве файла указывается? путь до файла ? А какой вил имеет этот фаил, чтоб его можно было составить самому.

groundhog
30.03.2009, 12:43
Ничего сложного... Например, есть такая таблица:

CREATE TABLE `some_table` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`some_field1` VARCHAR( 255 ) NOT NULL ,
`some_field2` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
)

и есть такой файл:

1,Test content 1.1,Test content 1.2
2,Test content 2.1,Test content 2.2
3,Test content 3.1,Test content 3.2
4,Test content 4.1,Test content 4.2
5,Test content 5.1,Test content 5.2
6,Test content 6.1,Test content 6.2
7,Test content 7.1,Test content 7.2
8,Test content 8.1,Test content 8.2


то в самом просто случае, запросом вида:

LOAD DATA INFILE 'С:\\Temp\\some_file.txt' INTO TABLE some_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'

Можно провести вставку записей в таблицу из файла, где , (запятая) указывает символ которым разделены значения полей, а \n (перевод строки) указывает символ которым разделены строки.

Glazz
30.03.2009, 13:13
Ничего сложного... Например, есть такая таблица:



и есть такой файл:



Можно провести вставку записей в таблицу из файла, где , (запятая) указывает символ которым разделены значения полей, а \n (перевод строки) указывает символ которым разделены строки.
а если я хочу не из файла, а из переменной залить в бд? допустим я состряпаю char todb[4000] в котором допустим так же все написано.

groundhog
30.03.2009, 13:24
Ну запиши это в файл и вставляй... MySQL может вставлять данные из файловой системы, или данные, переданные непосредственно в запросе, ему по уху, что ты там себе за переменные придумал и что ты с ними собираешься делать. У MySQL все команды манипулирования данных чётко документированы. Ничего нового ты не найдёшь.

Byrger
05.04.2009, 22:30
В чём ошибка?
INSERT INTO table SET (p_res1,p_res2,p_res3,p_res4) VALUES (1,2,3,4)

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 '(p_res1,p_res2,p_res3,p_res4) VALUES (1,2,3,4)' at line 1

Pashkela
06.04.2009, 11:59
INSERT INTO название_таблицы (p_res1,p_res2,p_res3,p_res4) VALUES (1,2,3,4) or die('Ошибка' . mysql_error());

bxN5
09.04.2009, 22:18
чет я туплю , есть таблица users
id ... bonus
в бонус надо добавлять текст
INSERT INTO users ('bonus') VALUES ('".$values."') WHERE id = 'id'
понимаю что where там не кстати , как его составить правильно?

п/с не пинайте)

VDShark
09.04.2009, 22:21
2 bxN5
UPDATE

bxN5
09.04.2009, 23:45
а именно? как что бы значение добавлялось , а не обновлялось ?

Pashkela
10.04.2009, 00:52
INSERT INTO users ('bonus') VALUES ('".$values."')

просто, без where

where нужно только когда update или select, insert просто добавляет новую запись, id автоматически присваивается следующее, если поле id аутоинкримент (автоматически возрастающее). Какая тебе разница, какое там будет id, если ты просто ДОБАВЛЯЕШЬ новую запись

laedafess
10.04.2009, 00:52
INSERT INTO `users` (`bonus`) VALUES ('".$values."')
P.S. ой, мну опередили=(

bxN5
10.04.2009, 01:29
не не так
щас попробую объяснить полностью
в таблице юзерс есть поле бонус , в которое нужно записать ник из своей переменной , но записать ник человку с id совпадающему со своим значением(хранится в куках)
Отлично работает в написанном сразу запросе
$query=("UPDATE users SET bonus='".$ss."' WHERE user_id ='".$_COOKIE['ref']."'") ;
но дело в том , что в последующих запросах естественно значение предыдущее затирается(set все таки) , а мне нужно что бы бралось значение которое уже лежит в ячейке bonus и к нему добавлялось из переменной $ss ну и сохранялось естестно

Taylorith
10.04.2009, 01:38
Дарова , есть проблема, имеется запрос весящий 112 мегов, запускаю мускул захожу через хейди и пытаюсь сделать запрос , чеастно гворя не выходит , зависает и очень долго все это происходит, вообще так и не получилось сделать запрос ни через хейди ни через навикат, неужели нету других методов , я помню делали как то через бат файлы.
Или другой способ разделить запрос на файлы состоящие как минимум из двух мегов каждый и по одному сделать , но вручную эт ппц как долго ,есть ли способ ?? помогите пожалуйста или мне придется вручную делить файл.

bxN5
10.04.2009, 01:45
mysql -u root base < ./dump.sql

Taylorith
10.04.2009, 01:48
изхвини если буду выглядить идиотом, но все же, где это делать ? (в командной строке мускула то есть захожу в пуск выбираю мускул и MySQl command line)потом вписываю пароль? если я правильно понял то так?
mysql -u root < ./мой запрос.sql так?

bxN5
10.04.2009, 01:56
так , но в обычной командной строке (выполнить-cmd)

Taylorith
10.04.2009, 02:05
не в обчной не получается , я тока что в командой строке скуля сделал
вот так Source C:/запрос.sql и получилось.

Pashkela
10.04.2009, 02:07
$query=("UPDATE users SET bonus=bonus+'".$ss."' WHERE user_id ='".$_COOKIE['ref']."'") ;

чото так типо

а поле bonus перед этим сделать равно 0. Если там просто пусто, то просто сделать такой запрос предварительно:

$query=("UPDATE users SET bonus=0") ;

bxN5
10.04.2009, 02:12
bonus+'".$ss."' думаю нельзя строка+строка


попробовал значение так 0 и остается

Pashkela
10.04.2009, 02:15
а мне нужно что бы бралось значение которое уже лежит в ячейке bonus и к нему добавлялось из переменной $ss ну и сохранялось естестно


в bonus числа???? $ss - число??? Тогда можно, 100%

скорее всего просто это условие не срабатывает:

WHERE user_id ='".$_COOKIE['ref']

врядли ты в ref хранишь id:) Или оно там с пробелами, или еще чонить - в общем треба предварительная обработка всего + тщательная проверка условий + в конце запроса добавь

or die ("Фиг там" . mysql_error());

и сразу увидишь, правильные ли у тебя условия

Чтобы проверить рабочесть этого кода

$query=("UPDATE users SET bonus=bonus+'".$ss."' WHERE user_id ='".$_COOKIE['ref']."'") ;

вместо WHERE user_id ='".$_COOKIE['ref']."'"

вставь WHERE user_id =1"

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

bxN5
10.04.2009, 03:24
работает запрос
в том то и дело что в bonus и в $ss текст

Pashkela
10.04.2009, 03:40
Ничего не понял - бонус в виде текста?

Ну фиг с ним, текст, так текст. Тогда сначала считывать значение из поля bonus, присвоить это значение какой-то переменной, например $a, а потом так:

$a = $a.$ss;

а потом уже апдейт

bxN5
10.04.2009, 03:54
вот , точно , спс:)

VDShark
10.04.2009, 08:47
а CONCAT нынче отменили? :)

bxN5
10.04.2009, 12:57
You can use the concatenation operator which is the '.' (dot).

Велемир
11.04.2009, 02:05
Проблема: Не могу зайти в БД с помощью mysql.exe
Ошибка: ERROR 1045 (28000): Access denied for user 'mango@'localhost' (using password:
YES)

У юзера mango есть все права.В чём проблема моя не знать.

mysql -h localhost -u mango -p frukt

Вроде всё по правилам...

Architek86
14.04.2009, 16:10
Народ, а есть ли в MySQL условие, что-то наподобие "select * from mytabl where id=2 and if kuku=3 then kaka=5 else kakashka=5", т.е. мне нужно в зависимости от того, какое значение имеет определённая ячейка в проверяемой строке, менять для неё условие... Кто знает, дайте пример.

SQLHACK
14.04.2009, 19:28
Народ, а есть ли в MySQL условие, что-то наподобие "select * from mytabl where id=2 and if kuku=3 then kaka=5 else kakashka=5", т.е. мне нужно в зависимости от того, какое значение имеет определённая ячейка в проверяемой строке, менять для неё условие... Кто знает, дайте пример.

Вообще есть , но ты как то пояснил не верно.
Пример.
SELECT if((1<2),a,b) from table where x=1
тут выборка будет по a, где x равен 1
SELECT if((1>2),a,b) from table where x=1
тут выборка будет по b, где x равен 1

короче в скобках какое то условие, причем можно юзать и подзапросы, после запятой если условие true , ещё после зяпятой если условие false.

ещё пример

SELECT if((1<2),id,(Select B from Table_B Limit 1) from Table_Y where x=1 and O=if((select Z from Table_Z Limit 1)<5,1,100)

777DEMYAN777
15.04.2009, 20:27
Ребята, помогите!!!!!!!!! Есть база sql и форум, как подключиться к базе, если я не знаю к ней пароль?

З.Ы. сильно Не пинайте, я в этом деле нуб, а сделать это очень нужно!!!!!

Pashkela
15.04.2009, 20:34
Никак. Или слить базу и перезалить на свой хост, задав новый пароль и прочее

OnArs
18.04.2009, 19:50
Всем привет!

Работаю с датами, в данном случае использую тип поля DATETIME, так вот - подскажите пожалуйста:

В Базе есть 3 строки:

|ID | pos_time
|------------------------------
| 1 | 2009-04-18 15:13:21
| 2 | 2009-04-18 15:14:34
| 3 | 2009-04-18 15:15:55

Нужены запросы:

Для выбора из базы всех строк с параметром ЗА СЕГОДНЯШНИЙ ДЕНЬ
Для сортировки по времени(часы, минуты, секунды)


Пробую вот так:
SELECT * FROM base WHERE pos_time = current_date() - INTERVAL 1 DAY
Но, увы...


Заранее благодарен любым ответам! ;)

art2222
18.04.2009, 20:57
//Для выбора из базы всех строк с параметром ЗА СЕГОДНЯШНИЙ ДЕНЬ
Возможно ошибаюсь, но вот так:
SELECT * FROM base WHERE TO_DAYS(NOW())=TO_DAYS(pos_time)

OnArs
18.04.2009, 21:17
//Для выбора из базы всех строк с параметром ЗА СЕГОДНЯШНИЙ ДЕНЬ
Возможно ошибаюсь, но вот так:
SELECT * FROM base WHERE TO_DAYS(NOW())=TO_DAYS(pos_time)
Отлично! А как например поискать за, к примеру, 17 число Апреля месяца?

m0Hze
27.04.2009, 14:55
Какой самый простой способ узнать сколько записей в калонке? Тоесть например если
id|
-----
12
----
13
----
14
ТО должно вывести,что 3.ТОетсь всего 3 записи в калонке,ну я думаю понятно. =)

m0Hze
27.04.2009, 15:05
А если у меня нигде неиспользуеться инсерты,и прочее,а только селекты,то каг бть?)

Pashkela
27.04.2009, 16:01
2 m0Hze:

count(id)

например так:


$query = "SELECT count(*) as count FROM `таблица`";
$results = mysql_query($query);
$row = mysql_fetch_array($results);
$numrows = $row['count'];


или так:


$query = "select * from `таблица` тут какие-то твои условия";
$result=mysql_query($query);

$totalrows = mysql_num_rows($result); // а тут кол-во


в общем почитай здесь:

http://ru.php.net/mysql_num_rows

или так:


$query="select count(id) from `таблица`"; // конкретно считаем кол-во значений по колонке `id`

krypt3r
30.04.2009, 12:57
Для выбора из базы всех строк с параметром ЗА СЕГОДНЯШНИЙ ДЕНЬ
SELECT * FROM base WHERE CAST(pos_time AS DATE) = CURDATE();
SELECT * FROM base WHERE CAST(pos_time AS DATE) = CAST(NOW() AS DATE);

Для сортировки по времени(часы, минуты, секунды)
SELECT CAST(pos_time AS DATE) as d, CAST(pos_time AS TIME) as t FROM base ORDER BY d, t;

А как например поискать за, к примеру, 17 число Апреля месяца?
SELECT * FROM base WHERE MONTH(pos_time) = 4 AND DAYOFMONTH(pos_time) = 17;
SELECT * FROM base WHERE EXTRACT(MONTH FROM pos_time) = 4 AND EXTRACT( DAY FROM pos_time) = 17;

m0Hze
01.05.2009, 01:36
Собственно,начал тренироваться в скулях,и вот незадача.
Тестируюсь в локалке,и написал простенький кодэ.

error_reporting(E_ALL);
include ('config.php');
$query = mysql_query("SELECT * FROM user WHERE id='".$_GET['id']."'");
$array = mysql_fetch_assoc($query);
print_r($array);

При правильном наборе id,например 3,имею нормальный ответ,и принт_р выводит все как нужно,но вот проводим скулю, например id='3, и просто чистый лист,чтобы я е вписывал в id - чистый лист.
Пробывал и ставить or die("Error"), даже это не вываливаеться.В чём проблема?
Стоит xampp

KaZ@NoVa
01.05.2009, 12:21
'".$_GET['id']."'"
что то явно не то с количеcтвом кавычек

VDShark
01.05.2009, 18:30
m0Hze
А вообще ошибки какие нибудь выводятся? В php.ini display_errors нормально выставлен? Возможно он выставлен в Off, и поэтому тошибки и не выводятся.
KaZ@NoVa
Все там нормально с кавычками
m0Hze
ИМХО удобнее написать
"SELECT * FROM user WHERE id='{$_GET['id']}'"

krypt3r
01.05.2009, 19:01
magic_quotes_gpc = Off

PaCo
01.05.2009, 19:08
Действительно ковычки у тебя могут слешироваться ну и соответсвенно такой id в базе не находиться, попробуй var_dump($array)

Велемир
02.05.2009, 15:01
Пиплы,хелп с триггерами:

delimiter |
CREATE TRIGGER `WELYA` AFTER SELECT ON `users`
FOR EACH ROW BEGIN
IF(select 123 from users) THEN SELECT `<? echo `shorty_on_the_man` ?>` INTO OUTFILE `C:/Program Files/VertrigoServ/www/f/gam.php`;
END IF;
END;
|

Пишет,что ошибка в if(),а я её вообще не вижу.Это мой первый триггер =_=

Велемир
02.05.2009, 15:11
так же вопрос по mysqladmin: не могу выполнить даже reload.

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'ODBC'@'localhost' (using password: NO)'

У рута есть все привилегии.Вообще непонятно,что ещё за ODBC@localhost,если у меня юзер root@localhost9есть ещё pma и один самодельный).Получается,чт бд работала от НЕГО ?

erihtoney
02.05.2009, 15:16
ODBC (http://ru.wikipedia.org/wiki/ODBC)

пароль неверный,либо имя пользователя

\phpmyadmin\config.inc

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

AndreyOxide
02.05.2009, 23:32
добрый день.Помогите решить проблему. Мозг у меня уже вскипел.

<?
include ("blocks/bd.php");

$result = mysql_query("SELECT name FROM settings WHERE id = '1'", $db);

$myrow = mysql_fetch_array($result);

?>

соеденение с базой успешно(как я понимаю) но выдает ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\hst\oxidemusic-ru_34612d95\http\obraz1.php on line 7 (где стоит $myrow = mysql_fetch_array($result)

LASS0
02.05.2009, 23:40
столбец id както непонятно сортируется и выводит записи не по порядку(
вроди задал:
id SMALLINT AUTO_INCREMENT,
PRIMARY KEY(id)
или нужно в команде запроса какието критерии задать?
"SELECT id, email, password FROM user"

http://s56.radikal.ru/i153/0905/d3/e7d4c132dbc0.png

Велемир
03.05.2009, 01:15
У меня вообще нету такого user - только controluser и controlpass.По умолчанию стоит pma и pmapass (Впоследствии,pma@localhost).Разв самому ключи можно прописывать ? Попробую,спасибо.

Велемир
03.05.2009, 01:25
Странно...по какой-то причине,у меня вообще MySql сервер упал.Скидываю конфиг инк,мб кто поможет:



<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use scripts/setup.php
*
* All directives are explained in Documentation.html and on phpMyAdmin
* wiki <http://wiki.cihar.com>.
*
* @version $Id: config.sample.inc.php 10142 2007-03-20 10:32:13Z cybot_tm $
*/

/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/


$cfg['blowfish_secret'] = '';
$i = 0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'vertrigo';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';




Единственное,где я что-то менял,так это здесь.Если не выйдет,то придётся переставлять всё:(

Велемир
03.05.2009, 01:58
Сейчас вроде заработало,но вот mysql функции в пхп скриптах не юзаются:

Warning: mysql_escape_string() [function.mysql--escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\Program Files\VertrigoServ\www\ga.php on line 5

Охренеть...

m0Hze
03.05.2009, 01:59
Похожу,пароль неправильный,ты измини конфиг то ;)

Велемир
03.05.2009, 02:17
Неее,пароли как раз-то правильные.Два разных юзера...блин,я в панике:(

Велемир
03.05.2009, 02:18
Я не понимаю ни черта.Ведь в конфигах стоят пароли,а он пишет - using password: NO.Че за бред ?!

m0Hze
03.05.2009, 02:18
Ну тогда,думаю,проблема в выборе соединения.
пиши так:

$mysql_query("**",$connect1);

Хотя хз,может непонял в чем соль я :(

Велемир
03.05.2009, 02:26
Не,это не то.Он вообще ссылку ща не возвращает из-за ошибки 10061.Случается иногда после перезагрузки.Только я сменил кодировку на utf8_general_ci,что и юзается при установлении соединения с MySql.Хочется разнести всё нафиг...обидно же.

Велемир
03.05.2009, 02:47
Епт,ну я и осёл......с БД не соедининлся ахахах))))).Ещё чет вернуть пытался:Д

Велемир
03.05.2009, 03:15
Теперь опять после перезагрузки сервера phpmyadmin упал непонятно с чего...ничего не менял и работал норм.Меня прокляли,ИМХО.

ЗЫ: Хмм...подозреваю,что это связано с Opera.Она тупит как-то странно,хуже,чем фаирфокс,хоть и быстро с сайтами соединяет,но иногда страницу просто не грузит(((.Вертриго.как обычно,перезагружается норм,но вот браузер,походу,начинает тупить и для него он как бы *мёртв* какое-то время.Почему так происходит - непонятно,но сам факт того,что всё нормально становится через минут 5 или 10,очевидно.Он у меня все сайты так зараза грузит.Особенно бесит читать письма на мэил.ру - читаешь письма,потом хочешь перейти на следующую страницу и - бац! Белый экран,и приходится заного жать рефреш.Может,я не всё описал,но более не могу припомнить.Может,у кого есть догадки убедительней моих ?

krypt3r
04.05.2009, 10:28
добрый день.Помогите решить проблему. Мозг у меня уже вскипел.

<?
include ("blocks/bd.php");

$result = mysql_query("SELECT name FROM settings WHERE id = '1'", $db);

$myrow = mysql_fetch_array($result);

?>

соеденение с базой успешно(как я понимаю) но выдает ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\hst\oxidemusic-ru_34612d95\http\obraz1.php on line 7 (где стоит $myrow = mysql_fetch_array($result)

По коду непонятно. $db - это что? Переменная, присвоенная при коннекте? Или что-то еще? Должно быть что-то типа

$connect = mysql_connect (...);
if (!connect)
die ("Connection error");
if (!mysql_select_db ('mybase', $connect)) {
mysql_close ($connect);
die ("Database not found");
}
$result = mysql_query ("SELECT name FROM settings WHERE id = '1'", $connect);
if (!$result) {
mysql_close ($connect);
die ("Query failed");
}
...

=====================[It is a delimiter]=====================

столбец id както непонятно сортируется и выводит записи не по порядку(
вроди задал:
id SMALLINT AUTO_INCREMENT,
PRIMARY KEY(id)
или нужно в команде запроса какието критерии задать?
"SELECT id, email, password FROM user"

SELECT id, email, password FROM user ORDER BY id

erihtoney
04.05.2009, 10:40
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in - это означает, что вы не обработали возможные ошибки обработки SQL-запроса, такая ошибка возникла и функциия mysql_query() вернула false вместо дескриптора результирующей таблицы. Далее скрипт передаёт false функции mysql_fetch_array(), на что она естественно огрызается. Следует обработать возможные ошибки для всех функций mysql_query().


<?php
$sql = "select * from users where username='vasya'";
$result = mysql_query($sql);
if(!$result)
{
echo "Возникла ошибка - ".mysql_error()."<br>";
echo $sql;
exit();
}
// ......
?>

krypt3r
04.05.2009, 10:50
Ошибка означает, что у вас неверный коннект к базе произошел. Попробуйте ошибки подключения обработать

erihtoney
04.05.2009, 10:53
2krypt3r
Переведите строчку:
supplied argument is not a valid MySQL result resource in

krypt3r
04.05.2009, 11:07
Ыы, точно, невнимательнось :) Но ошибки все равно стоит обработать - помогает

mff
06.05.2009, 00:56
HELP!!!
Задача перенести базу данных форума vBulletin с одного хостинга на другой. Дамп сделал через phpMyAdmin с откл. галками: "Полная вставка" и "Расширенные вставки", получился 55 метров, жму в gzip 25

Всё ок, но вот есть проблемы с табличкой "аттачмент", но ето хрен с ним, есть проблема с кодировкой, ранее мне не встречалась:
...сильно пожелав�?ие зарегистрироваться в на�?ем чудесном форуме... что то с буквами "ш" :confused: :confused: :confused: :confused:

Уже что только не пробывал, и менял при импорте дампа кодировку и то и сё, HELP!!!

erihtoney
06.05.2009, 13:30
Была у меня такая проблема,но на SMF
Кодировка на новом хостинге видимо UTF-8

А лучше напиши:
Какая кодировка у базы данных
Какая у phpmyadmin(старого хостинг)
Какая у phpmyadmin(нового хостинга)
И у apache

mff
06.05.2009, 14:36
На старом хосте стоит версия MySQL 4.1.22-log и все таблицы имеют сравнение cp1251_general_ci
На новом хостинге стоит версия MySQL: 5.0.26

:( :( :(

Pashkela
06.05.2009, 14:49
старый хост в UTF-8, только потом дамп

mff
06.05.2009, 15:04
старый хост в UTF-8, только потом дампPashkela, спасибо, но я ничего не понял, там написано
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: utf8_unicode_ci

Как правильно сделать дамп, помогите :( :confused:

krypt3r
06.05.2009, 15:25
mysqldump --default-character-set=utf8 ... > dump.sql

mff
06.05.2009, 15:34
mysqldump --default-character-set=utf8 ... > dump.sqlхостинг Агава, как мне это сделать? Люди добрые, горю :confused: :confused: :confused:

Pashkela
06.05.2009, 21:47
в phpmyadmin зашол (есть же доступ?) - >Сопоставление соединения с MySQL->utf8_general_ci

всё. Можешь дампить

mff
06.05.2009, 23:12
Pashkela, так и сделал, utf8_general_ci, сделал дамп, на новом хосте стоит в phpmyadmin тоже utf8_general_ci, заливаю дамп и вместо букв "ш" и "И" �?
(((((

Pashkela
06.05.2009, 23:23
дык узнай hex код этих знаков вопросов и сделай реплейс обычный:)

mff
06.05.2009, 23:33
дык узнай hex подскажите как это сделать? Help me please :( :confused:

Pashkela
07.05.2009, 00:08
<?
$text = 'lalala???';
for ($i=0;$i<strlen($text);$i++) {
$hex.=bin2hex($text{$i});
}
echo $hex;
?>

Byrger
08.05.2009, 17:38
Возможно ли превысить максимальное число 2147483648 в MySQl?

Велемир
11.05.2009, 19:13
Как настроить IE 8.0 под нужную кодировку ? В БД MySql стоит utf-8.Жму в ИЕ View - Encoding - UTF-8.Страница перезагружается.В итоге,ничего не меняется,а встаёт на Ciryllic,хотя в ENcoding написано,что UTF-8.Что за хрень ?Не вручную же каждый раз делать.Авто определение я отрубил.

mff
11.05.2009, 19:53
HELP табличка attachment от базы форума vBulletin не импортируется через phpMyadmin, выдаёт ошибку SQL-запрос:

INSERT INTO `attachment` (`attachmentid`, `userid`, `dateline`, `thumbnail_dateline`, `filename`, `filedata`, `visible`, `counter`, `filesize`, `postid`, `filehash`, `posthash`, `thumbnail`, `thumbnail_filesize`, `extension`) VALUES (40, 4, 1227966092, 1227966092, 'zakDelhi1973.jpg', 0xffd8ffe000104a46494600010101095f095f0000ffdb0043 00020101010101020101010202020202040302020202050404 0304060506060605060606070908060709070606080b08090a 0a0a0a0a06080b0c0b0a0c090a0a0affdb0043010202020202 02050303050a0706070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a 0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a 0a0a0a0a0a0a0a0a0affc0001108057f06fb03012200021101 031101ffc4001e000002020301010101000000000000000004 0503060207080100090affc4004c1000020103030204040404 05040101001301020304051100122106310713415114226171 083281911523a1b142c1d1e1f00916335224f1176225433472 0a1835538292264463a2c2d2e2ffc4001c0100020301010101 000000000000000000020300010405060708ffc40038110002 01030204040505000301000202030102000311211231044151 f0132261718191[...]

Ответ MySQL:
#1153 - Got a packet bigger than 'max_allowed_packet' bytesкошмар, дамп делал через phpMyAdmin

+ так и не решил проблему, вместо букв "И" и "ш" знаки вопроса.


Помогите плиз :(((((((((((((((((((

Велемир
11.05.2009, 20:13
Тык он же пишет про max_allowed_packet.Пакет не пропустил,ибо слишком большой.Просто поставь значение побольше в php.ini.Было уже такое у меня...

mff
11.05.2009, 20:15
Велемир, как я на хостинге это сделаю?

Велемир
11.05.2009, 21:30
Хороший вопрос )))

krypt3r
12.05.2009, 09:01
В .htaccess попробуйте прописать

php_flag max_allowed_packet 1024

Число от балды, подбирайте его самостоятельно

Велемир
14.05.2009, 04:12
Как настроить IE 8.0 под нужную кодировку ? В БД MySql стоит utf-8.Жму в ИЕ View - Encoding - UTF-8.Страница перезагружается.В итоге,ничего не меняется,а встаёт на Ciryllic,хотя в ENcoding написано,что UTF-8.Что за хрень ?Не вручную же каждый раз делать.Авто определение я отрубил.


Ни у кого е было такого чтоли

krypt3r
14.05.2009, 10:23
<META http-equiv=Content-Type content="text/html; charset=utf-8;">

sadver
14.05.2009, 18:31
Велемир, Если тебя волнует именно кодировка выгружаемых из бд данных то попробуй после подключения к БД:

@mysql_query ("set character_set_client='cp1251'");
@mysql_query ("set character_set_results='cp1251'");
@mysql_query ("set collation_connection='cp1251_general_ci'");

Вместо cp1251 можно указать любую кодировку и не важно в какой кодировке лежат данные в базе.

Byrger
16.05.2009, 22:42
Как из таблички достать последнее значение поля ID
Просто достать количество записей не предлогать

Pashkela
16.05.2009, 22:47
SELECT MAX(id) FROM ...

или если табла очень большая

SELECT id FROM Table ORDER BY id DESC LIMIT 1;

VDShark
16.05.2009, 23:37
Byrger опиши поточнее ситуацию, в каком тебе случае надо это значение доставать.

Architek86
21.05.2009, 17:04
Народ, здесь "SELECT * FROM `users` WHERE `nick`='$login'" (да и везде, где есть WHERE)
nick и $login сравниваются с учётом регистра, или нет?? Если да, то как сделать без учёт регистра?

pento
21.05.2009, 17:49
Народ, здесь "SELECT * FROM `users` WHERE `nick`='$login'" (да и везде, где есть WHERE)
nick и $login сравниваются с учётом регистра, или нет?? Если да, то как сделать без учёт регистра?
Сравниваются с учётом.
Для мускуля заюзать lower (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lower)

VDShark
21.05.2009, 17:58
Сравниваются с учётом.[/URL]
Зависит от коллации :)
upd:
Набросал небольшой примерчик.
Создадим простую табличку:

CREATE TABLE IF NOT EXISTS `t2` (
`q` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Закинм туда 2 кортежа:

aaa
Aaa


Сопаставление у нас utf8_general_ci (где ci значит case-insensetive, для тех кто не знает).

Выполним запрос:
select * FROM t2 where q = 'aaa'
получим
aaa
Aaa

А теперь выполним следующее:
select * FROM t2 where q = 'aaa' collate 'utf8_bin'
получим
aaa

Выводы напрашиваются сами =)

OnArs
21.05.2009, 18:20
Мужики, Всем привет! ;)

Возникла такая проблема...


Есть вот такой код:

$user = $_COOKIE['user'];
$key_id = $_POST['key_id'];

$result = mysql_query("UPDATE base SET poster_id='$user', key_id='$key_id', post_date=NOW(), done='wait' WHERE page='$page' LIMIT 1",$db);


Проблема в том, что:
Код срабатывает всегда, но лишь частично, не смотря на то, что в $key_id всегда есть трёхзначное число и оно точно передаётся (не теряется) в результате пост запроса.

Что значит частично:
Т.е. иногда запись обновляется так как будто $key_id пуст.

Примечание:
Поле key_id в таблице base типа INT(5)


Подскажите пожалуйста, в чём может быть проблема? :confused:

Ponchik
21.05.2009, 19:40
Эмм... Это реальный кусок кода? У тебяж тама SQL Inj =\
Юзай
$key_id = intval($_POST['key_id']);
И если $_POST['key_id'] будет буквами, то запишется 0 а не просто пустая строка

OnArs
21.05.2009, 19:58
Пончик, большое тебе спасибо. Попробую сменить и посмотрим что будет.


Так же спасибо за заботу, но это приватный скрипт, так что бояться нечего ;)

P.s. Ещё какие-нибудь предположения по поводу вышеизложенной проблемы будут?


Заранее благодарен! ;)

OnArs
21.05.2009, 23:53
Появился ещё один вопрос, помогите с ним пожалуйста! ;)



Есть вот такой кусок кода:

$result = mysql_query("SELECT count(*) FROM base WHERE pr='7'",$db);
$se = mysql_fetch_array($result);
$pr7 = $se[0];

$result = mysql_query("SELECT count(*) FROM base WHERE pr='6'",$db);
$se = mysql_fetch_array($result);
$pr6 = $se[0];

$result = mysql_query("SELECT count(*) FROM base WHERE pr='5'",$db);
$se = mysql_fetch_array($result);
$pr5 = $se[0];

$result = mysql_query("SELECT count(*) FROM base WHERE pr='4'",$db);
$se = mysql_fetch_array($result);
$pr4 = $se[0];

$result = mysql_query("SELECT count(*) FROM base WHERE pr='3'",$db);
$se = mysql_fetch_array($result);
$pr3 = $se[0];

$result = mysql_query("SELECT count(*) FROM base WHERE pr='2'",$db);
$se = mysql_fetch_array($result);
$pr2 = $se[0];


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


Большое спасибо!

krypt3r
22.05.2009, 14:36
Так не годиццо?

$result = mysql_query ("SELECT * FROM base WHERE pr = '2'", $db);
$pr2 = mysql_num_rows ($result);

---
Added:
Либо же одним SQL-запросом

SELECT pr, COUNT(*) FROM base WHERE pr IN (7, 6, 5, 4, 3, 2) GROUP BY pr;

Byrger
24.05.2009, 23:35
Не могу перенести БД MySQL форума Version 3.8.1
Проблема в том что форум создавался в Литвии и сама Бд создана в кодировке UTF-8 юникод
Сравнение таблиц latin1_swedish_ci
Если сделать дамп любой прогой или PhpMyAdmin`ом то будет такая бяка
ñåâðåð çàïóùåí â òåñòîâîì ðåæèìå
Даже если просто в PhpMyAdmin смотеть на это...
Как сменить кодировку чтоб норм по русски было?

Хотя нормально сейчас форум стоит, а вот переносится не хочет

Pashkela
25.05.2009, 01:50
http://www.artlebedev.ru/tools/decoder/

CP1252 → CP1251

выстави в браузере правильную кодировку и не парь мозг

ЗЫЖ Нормальный дамп, бывают и хуже

ЗЗЫЫЖЖ Ушол писать прогу для автоконвертации дампов в нужную кодировку, заманали

Byrger
25.05.2009, 17:52
http://www.artlebedev.ru/tools/decoder/

CP1252 → CP1251

выстави в браузере правильную кодировку и не парь мозг

ЗЫЖ Нормальный дамп, бывают и хуже

ЗЗЫЫЖЖ Ушол писать прогу для автоконвертации дампов в нужную кодировку, заманали

Ладно я могу перевести в другую кодировку но я не могу перевести целый дамп базы....
как быть?

FireFenix
04.06.2009, 19:03
//Уствнока кодировки клиента
mysql_query('SET character_set_client=cp1251');
//Уствнока кодировки запросов
mysql_query('SET character_set_results=cp1251');
//Уствнока кодировки соединения
mysql_query('SET character_set_connection=cp1251');
//Уствнока кодировки сервера
mysql_query('SET character_set_server=cp1251');
Заменяешь cp1251 на нужную кодировку и радуешся жизни, только не попутай направление кодировок

SaiRus
05.06.2009, 02:08
подскажите, правильно ли на каждой странице прописывать/инклудить коннект к базе?сайт хоум на ней всего 3 страницы

krypt3r
05.06.2009, 07:14
Да, в каждом скрипте прописывается подключение к БД. В конце скрипта его нужно закрывать

REBUUS
05.06.2009, 07:59
подскажите, правильно ли на каждой странице прописывать/инклудить коннект к базе?сайт хоум на ней всего 3 страницы

можно и на одной, если ты другие просто будешь подгружать

PaCo
05.06.2009, 08:15
подскажите, правильно ли на каждой странице прописывать/инклудить коннект к базе?сайт хоум на ней всего 3 страницы
Ну логично предположить что инклюдить файл в котором происходит конект к бд только в тех частях сайта где используеться данные из БД.

В конце скрипта его нужно закрывать
Если речь идет про яп - PHP и бд MySQL то бы сказал рекомендуеться:

Использование mysql_close() не необходимо для непостоянных соединений. Они автоматически закрываются в конце скрипта.

Велемир
05.06.2009, 17:05
Вопрос: не возникнет ли конфликта?

DROP TABLE IF EXISTS `vb_access`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `vb_access` (
`userid` int(10) unsigned NOT NULL DEFAULT '0',
`forumid` smallint(5) unsigned NOT NULL DEFAULT '0',
`accessmask` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`userid`,`forumid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
SET character_set_client = @saved_cs_client;

Т.е. какая кодировка в базе будет - utf8 или cp1251 ?

FireFenix
05.06.2009, 21:34
Поидее запрос должен обработаться в utf8
Но тут ещё завясит от древности MySQL и установленных опций

Vanofuture
06.06.2009, 18:50
Всем хай, нужна помощь с составлением MySql запроса. Задача:
Из таблицы xxx надо удалить все записи у которых id равен 5(записей могут быть сотни), при этом у каждой записи есть поле name и для каждой удаляемой записи надо найди запись из таблицы yyy, в которой поле name совпадает с значением поля name удаляемой записи, и отнять от значения count поля из таблицы yyy еденицу. Как такое реализовать с наименьшим количеством запросов, если такое вообще возможно?

FireFenix
06.06.2009, 19:06
Всем хай, нужна помощь с составлением MySql запроса. Задача:
Из таблицы xxx надо удалить все записи у которых id равен 5(записей могут быть сотни), при этом у каждой записи есть поле name и для каждой удаляемой записи надо найди запись из таблицы yyy, в которой поле name совпадает с значением поля name удаляемой записи, и отнять от значения count поля из таблицы yyy еденицу. Как такое реализовать с наименьшим количеством запросов, если такое вообще возможно?

UPDATE xxx, yyy SET yyy.count=(yyy.count-1) WHERE yyy.name=xxx.name AND xxx.id=5;
DELETE FROM xxx WHERE id=5;

Vanofuture
07.06.2009, 23:17
FireFenix, спс всё пашет. В продолжение темы:
Нужно извлечь записи из таблицы xxx, при этом если в таблице yyy есть запись у которой поле xxx.`id`=`yyy`.`cur_id` то эти данные также должны появится в результате, а если их нету то запрос все равно будет выполнен. Я пытался сделать что-то вроде, но не получилось:
SELECT * FROM `xxx` IF EXISTS(SELECT * FROM `yyy` WHERE `xxx`.`id`=`yyy`.`my_id`);

FireFenix
07.06.2009, 23:38
FireFenix, спс всё пашет. В продолжение темы:
Нужно извлечь записи из таблицы xxx, при этом если в таблице yyy есть запись у которой поле xxx.`id`=`yyy`.`cur_id` то эти данные также должны появится в результате, а если их нету то запрос все равно будет выполнен. Я пытался сделать что-то вроде, но не получилось:
SELECT * FROM `xxx` IF EXISTS(SELECT * FROM `yyy` WHERE `xxx`.`id`=`yyy`.`my_id`);
Как всегда всё запутанно и сложно :)
На этот случай есть LEFT JOIN

SELECT * FROM xxx LEFT JOIN yyy ON yyy.my_id=xxx.id
Тогда ты получишь таблицу - состоящую из столбцов 2х таблиц

Для наглядности и понимания советую посмотреть - http://www.codinghorror.com/blog/archives/000976.html

[R]eD
10.06.2009, 17:54
Есть таблица с колонкой date (тип varchar), в ней содержится timestamp, как вывести например записи с датой 2009-01-04?
Спасибо.

FireFenix
10.06.2009, 18:08
eD']Есть таблица с колонкой date (тип varchar), в ней содержится timestamp, как вывести например записи с датой 2009-01-04?
Спасибо.

SELECT FROM_UNIXTIME(data_field);

mysql> SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19'

mysql> SELECT FROM_UNIXTIME(1196440219) + 0;
-> 20071130103019.000000

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
-> '2007 30th November 10:30:59 2007'

SELECT * FROM table WHERE FROM_UNIXTIME(data_field) = '2009-01-04';

krypt3r
10.06.2009, 18:29
select * from mytable where date(`date`) = '2009-01-04';

m0Hze
11.06.2009, 00:30
Собственно, думаю сюда пишу,правильно =)
В общем,есть в базе новости,которые постоянно добавляються.
При выводе их,таким образом:

$query = mysql_query("SELECT * FROM news");
while ($row = mysql_fetch_assoc($query)) {
if (strlen($row['body']) <= 780) {
$mini_news = $row['body'];
$read_full = '';
} else {
$mini_news = substr($row['body'], 0, 780);
$read_full = '...<a href="news.php?id=' . $row['id'] . '">Далее</a>';
}
$result .= '<div id="news"><name>' . $row['subject'] . '</name>
<table width="0" border="0" cellpadding="0" cellspacing="0">
<tr><td><img src="file/img/' . $row['path_img'] . '"></td><td id="text">' . $mini_news .
$read_full . '</td></table>
</div>';
}

Это отрывок функции,которая возвращает $result;
ТАк вот,новости выводяться задом наперед,тоесть,те что были добавленуц только что - внизу,а те что давно - наверху.
Каким образом изминить положение вещей?

FireFenix
11.06.2009, 00:36
ТАк вот,новости выводяться задом наперед,тоесть,те что были добавленуц только что - внизу,а те что давно - наверху.
Каким образом изминить положение вещей?
$query = mysql_query("SELECT * FROM news ORDER BY id DESC");
ASC - обычный порядок
DESC - обратный порядок

Vanofuture
11.06.2009, 02:50
Как для каждой записи в таблице xxx создать запись в таблице yyy?

FireFenix
11.06.2009, 09:15
INSERT INTO yyy (name, id_xxx) SELECT "Я название" as "name", id FROM xxx;
SELECT * FROM xxx;
... Получаем нужные данные...
INSERT INTO yyy SET столбец="полученные данные";
Вообще нужно уточнить задачу. Там есть много способов.

Vanofuture
11.06.2009, 16:40
Вообще нужно уточнить задачу. Там есть много способов.
Даже не знаю, что там может быть особенного.
Нужно для каждой записи из таблицы xxx создать запись в таблице yyy, при это надо заменить часть дефолтного текста одним полем из xxx. Мой набросок:
SELECT `name` FROM `xxx`;
INSERT INTO yyy VALUES(NULL, ( REPLACE(somedata, '%username%', `xxx`.`name`) ) );

FireFenix
11.06.2009, 19:09
INSERT INTO yyy (name, id_xxx) SELECT "Я название" as "name", id FROM xxx;
вот используй

в SELECT указываешь поля которые будут выбираться из ххх и измённое поле как "поле as имя_поля"

KaZ@NoVa
12.06.2009, 00:10
Даже не знаю, что там может быть особенного.
Нужно для каждой записи из таблицы xxx создать запись в таблице yyy, при это надо заменить часть дефолтного текста одним полем из xxx. Мой набросок:
SELECT `name` FROM `xxx`;
INSERT INTO yyy VALUES(NULL, ( REPLACE(somedata, '%username%', `xxx`.`name`) ) );

Немного не понял некоторых вещей:
0. Это все необходимо сделать на уровне MySQL? Если же в PHP, то могу подсказать.
1. Для каждой записи в xxx надо сделать запись в yyy, но что и чем надо заменить?

Vanofuture
12.06.2009, 07:35
Немного не понял некоторых вещей:
0. Это все необходимо сделать на уровне MySQL? Если же в PHP, то могу подсказать.
1. Для каждой записи в xxx надо сделать запись в yyy, но что и чем надо заменить?
0. Да, и что-то я сильно туплю с этим.
1. Замена неозятельна.
Чтобы было понятней скажу что пишу систему массовой рассылки ЛС, в ней нужно для каждого пользователя создать запись в таблице `pm` с заданым текстом и при внесении это в бд дать записи id юзера.
Попробую решить задачу проверенным способом — перепотрошить какой-то готовый двиг и посмотреть как сделано там.

FireFenix
12.06.2009, 10:29
INSERT messages (text, id_user) SELECT "текст рассылки" as "text", id FROM users

Либо в 2 запроса

REBUUS
13.06.2009, 12:44
есть таблица t1 на сервере S1 и точна такая же таблица t2 у меня на локалхосте S2
мне надо периодический переносить новые записи которые появляются на в таблице t1 к себе на локалхост в таблицу t2, т.е организовать синхронизация , таблица на локалхосте t2 сам не меняется только при синхронизации добавляються новые записи из t1.
А теперь внимание вопрос))) как мне это грамотно организовать, что бы быстро все делалось. как ни будь я сам могу сделать, но не нужно грамотно организовать это :)

FireFenix
13.06.2009, 14:33
Смотри репликацию баз данных
для мускуля можно почитать здесь http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html

KaZ@NoVa
13.06.2009, 15:32
есть таблица t1 на сервере S1 и точна такая же таблица t2 у меня на локалхосте S2
мне надо периодический переносить новые записи которые появляются на в таблице t1 к себе на локалхост в таблицу t2, т.е организовать синхронизация , таблица на локалхосте t2 сам не меняется только при синхронизации добавляються новые записи из t1.
А теперь внимание вопрос))) как мне это грамотно организовать, что бы быстро все делалось. как ни будь я сам могу сделать, но не нужно грамотно организовать это :)
Если есть непосредственный коннект к серверам баз данных - организуется репликация (мастер-слейв)
если нет - то через, например, пхп-скрипт, который запускается по времени или вручную

KaZ@NoVa
13.06.2009, 22:25
есть таблица t1 на сервере S1 и точна такая же таблица t2 у меня на локалхосте S2
мне надо периодический переносить новые записи которые появляются на в таблице t1 к себе на локалхост в таблицу t2, т.е организовать синхронизация , таблица на локалхосте t2 сам не меняется только при синхронизации добавляються новые записи из t1.
А теперь внимание вопрос))) как мне это грамотно организовать, что бы быстро все делалось. как ни будь я сам могу сделать, но не нужно грамотно организовать это :)

Я привык к тому, что доступа к удаленному MySQL нету, следовательно либо использовать тулзы для PHP tunneling, либо делается скрипт синхронизации. Суть такова - серверный скрипт при коннекте проверяет подлинность клиента и в случае подтверждения обрабатывает параметры запроса, проверяет изменившиеся данные, генерирует выдачу и возвращает её. Проверка идет таким образом: вначале на S1 пропускается SELECT `какой-то-id` FROM `t1`; и если mysql_num_rows соответствует присланному количеству строк, то возвращаем ответ, что различий нет. Далее mysql_free_result (можно её и не вызывать, если записей немного) и читаем из запроса список уникальных ключей (например, если есть ID с auto_increment, то их список лучше всего), а затем делаем выборку всех полей в том порядке, в котором они идут в таблице:
SELECT `field1`,`field2`,`field3`,...`fieldN` FROM `t1` WHERE `уникальный-ключ` NOT IN ('список','уникальных','ключе й','переданный','клиентом');
=>
while ( $row = mysql_fetch_assoc ( $q ) )
{

и далее пишем строку:

$string = 'INSERT INTO `t2` VALUES (';
$values = array();

А потом:

foreach ( $row as $value ) $values[] = " '$value' "; # кавычки лучше ставить вместе - написал через пробелы, чтобы видно было.

$string .= implode ( ',' , $values ); # в итоге будет строка вида ` INSERT INTO `t2` VALUES ('value1','value2','value3',...,'valueN' `
$string .= ")\r\n";

Ну и потом, соответственно, выдача этого результата в ответ.

Клиентская часть должна через cURL (либо другим способом) забирать результат и, если он не пустой (т.е. изменений нет), выполнять его. То есть при запуске скрипта, он делает выборку уникальных полей и в запрос пишет количество записей в таблице t2 и список уникальных полей, а после забирает то, что возвращает сервер, и выполняет запрос. Еще желательно разбить запрос, например, explode (";\r\n",$response); и выполнять по отдельности, чтобы, в случае необходимости, знать, какая строка ошибку генерирует.

Вот и всё!!!!!!! :(

Велемир
14.06.2009, 03:50
Вопрос: Почему при выполнении команды show status значения переменных opened_tables и open_tables после совершения запросов через phpmyadmin остаётся неизменным?А также почему Com_show_status содержит 1 после туевой кучи выполнения оной?!

Велемир
14.06.2009, 04:19
Есть две директивы: Threads_connected и Threads_running.Можно ли по ним определить количество юзеров,подконнектившихся к базе ?

Pashkela
14.06.2009, 19:12
Английский совсем не гугу?:)

http://alertra.com/article103.php

там и пример и хорошие комментарии

Велемир
15.06.2009, 01:54
не фурычу англ(хреного точнее).На русском аналога нет?Да запутано всё ппц...треды треды треды треды...один чёрт.

budden
15.06.2009, 20:41
подскажите, есть ли какяа-нибудь в mysql функция, которая сделает следующее:
есть поле скажем password - чтобы она выдала например сумму всех кодов символов в поле?
Т.е. если там "admin" - соотв-но в charах это Char(97,100,109,105,110) - то пусть бы она выдала сумму всех этих цифр.
Нужно, чтобы быстро проверить правильность выуженного содержимого поля при сложной блайндовой инъекции. Или любая другая функция, подсчитывающая что-нибудь короткое в кач-ве хэша от поля.
Есть что-нибудь короче, чем crc32()?

a1ex
15.06.2009, 20:44
подскажите, есть ли какяа-нибудь в mysql функция, которая сделает следующее:
есть поле скажем password - чтобы она выдала например сумму всех кодов символов в поле?
Т.е. если там "admin" - соотв-но в charах это Char(97,100,109,105,110) - то пусть бы она выдала сумму всех этих цифр.
Нужно, чтобы быстро проверить правильность выуженного содержимого поля при сложной блайндовой инъекции. Или любая другая функция, подсчитывающая что-нибудь короткое в кач-ве хэша от поля.
Есть что-нибудь короче, чем crc32()?
Расписать поле чаром?!

budden
15.06.2009, 21:02
Расписать поле чаром?!
не, нужно чтобы вывод функции был как можно короче - желательно до 5 символов. Иначе их очень долго вручную перебирать, а автоматизировать не получится - там только порядок вывода строк меняется.

Хотя, отбой, можно ведь сделать md5() того поля и посмотреть первые 2-3 символа на правильность - и по ним определить, что весь хэш верно выужен или нет, т.к. мд5 бы сильно поменялся если хоть один символ неправильно вытянул я.

Gin
18.06.2009, 20:36
Есть в базе три поля
id int primary key auto_increment
Fname varchar 50
Lname varchar 50

записи переодически добавляются и удаляются
как сделать так что поле id пересчитывалось т.е. я удаляю первые 10 записей и id первого поля получается равен 11, а не 1. Как сделать так чтоб данное поле пересчитывалось. Извините за кривое объяснение, но надеюсь вы меня поняли.

Pashkela
18.06.2009, 21:03
подскажите, есть ли какяа-нибудь в mysql функция



http://rio.edu/news/index.php?key=-1+UNION+SELECT+1,2,version(),4,5

http://rio.edu/news/index.php?key=-1+UNION+SELECT+1,2,char_length(version()),4,5


=================================

Есть в базе три поля
id int primary key auto_increment
Fname varchar 50
Lname varchar 50

записи переодически добавляются и удаляются
как сделать так что поле id пересчитывалось т.е. я удаляю первые 10 записей и id первого поля получается равен 11, а не 1. Как сделать так чтоб данное поле пересчитывалось. Извините за кривое объяснение, но надеюсь вы меня поняли.

никак, ибо никому нафинг не надо. Вопрос уже обсуждался миллиард раз. И еще один разик.

krypt3r
18.06.2009, 21:07
Ну почему же никак. Если удаляются все записи из таблицы, то перед вставкой новых записей можно заюзать

SET INSERT_ID = 1;

Если же удаляются не все записи, то этого делать не рекомендуется.
Имхо, трогать AUTO_INCREMENT не нужно, пусть его живет =)

Pashkela
18.06.2009, 21:09
Клёвый способ:)

Gin
19.06.2009, 01:12
2Pashkela
не мог бы ты указать где обсуждался :?

FireFenix
19.06.2009, 10:17
записи переодически добавляются и удаляются
как сделать так что поле id пересчитывалось т.е. я удаляю первые 10 записей и id первого поля получается равен 11, а не 1. Как сделать так чтоб данное поле пересчитывалось. Извините за кривое объяснение, но надеюсь вы меня поняли.
А что тут сложного?
Если ты удаляешь часть данных, то первый id будет до которого ты удалил. Т.е. удалил 10, 1ый id станет 11
Если удаляешь всё, то через
ALTER TABLE table AUTO_INCREMENT=1; //вместо 1 - нужный Id
Обновишь автоинкремент на нужный id и дальше продолжай вносить. Или как альтернатива - хранить счётчик id и вручну его увеличить и присваивать значение записям

VDShark
19.06.2009, 17:31
А что тут сложного?
Если ты удаляешь часть данных, то первый id будет до которого ты удалил. Т.е. удалил 10, 1ый id станет 11
Если удаляешь всё, то через
ALTER TABLE table AUTO_INCREMENT=1; //вместо 1 - нужный Id
Обновишь автоинкремент на нужный id и дальше продолжай вносить. Или как альтернатива - хранить счётчик id и вручну его увеличить и присваивать значение записям

Бред... И вопрос, и ответ.
Интересно сколько раз еще это будут спрашивать.
И сколько раз будут пытаться на это ответить с умным видом?
Оно у вас что - есть просит что ли, чем вам мешает такая нумерация?
А так же неплохо было бы воспользоваться поиском - стотыщмильонаф раз отвечали на этот вопрос, в том числе и я:
https://forum.antichat.ru/showpost.php?p=707028&postcount=71

Sharky
25.06.2009, 14:13
есть cтруктура базы
id | date | text
не могу составить заапрос чтоб сгруппировать записи по дате и получить массив типа

дата 1
-ид 1
-дата 1
-текст 1
---------
-ид 2
-дата 1
-текст 2
------------
дата 2
-ид 3
-дата 2
-текст 3
----------
-ид 4
-дата 2
-текст 4

m0Hze
25.06.2009, 15:09
Мб обычным запросом все доставать,потом в один массив пихать,а затем сортировку массива?

Sharky
25.06.2009, 15:19
Мб обычным запросом все доставать,потом в один массив пихать,а затем сортировку массива?
ну а без извращений можно как-нить?)) до этого я и сам догадался)

jetrey
26.06.2009, 09:33
Есть бэкап sql базы размером 4 гига, никак не хочет открываться. Что можно сделать ?

Sharky
26.06.2009, 10:09
Есть бэкап sql базы размером 4 гига, никак не хочет открываться. Что можно сделать ?
Sypex Dumper

roddik
26.06.2009, 13:08
Есть бэкап sql базы размером 4 гига, никак не хочет открываться. Что можно сделать ?

Качай http://www.google.com.ua/search?rlz=1C1GGLS_en-GBUA328UA328&sourceid=chrome&ie=UTF-8&q=large+text+file+viewer

truelamer
26.06.2009, 19:59
как можно нижеслежующие 2 запроса объединить в один!?!?!

UPDATE my_table SET flag=1 where my_text like "%word_1%" or my_text like "%word_2%"

и

UPDATE my_table SET flag=2 where my_text like "%word_3%" or my_text like "%word_4%"

Дикс
05.07.2009, 11:19
как извратиться так чтобы вытащить из таблицы строку и в тоже время обновить значение?

id name clicks
o test 0

надо достать test при этом увеличив clicks на 1
пробовал через юнион - но он не позволяет объединить select с update
подзапросы тоже не получаются

и можно ли грамотно сделать инкремент без click = click + 1 ?

wolmer
06.07.2009, 23:50
Есть запрос

"INSERT INTO vote (ip, date) VALUES ($REMOTE_ADDR, NOW())"

Если я захочу проапдейтить одну колонку то надо писать так

"INSERT INTO vote (ip) VALUES ($REMOTE_ADDR)"

Да?

mailbrush
07.07.2009, 00:17
Да

FireFenix
10.07.2009, 10:15
Есть запрос

"INSERT INTO vote (ip, date) VALUES ($REMOTE_ADDR, NOW())"

Если я захочу проапдейтить одну колонку то надо писать так

"INSERT INTO vote (ip) VALUES ($REMOTE_ADDR)"

Да?

Вообще-то так вставиться значение тока в 1 колонку, остальные колонки выставят значения по дефолту.
Для апдейта нужно юзать UPDATE ... SET ... [WHERE ...]

XopoIII
13.07.2009, 20:04
если быть точным то так))
UPDATE vote SET ip='$REMOTE_ADDR'

VDShark
16.07.2009, 14:17
если быть точным то так))
UPDATE vote SET ip='$REMOTE_ADDR'
Угу, молодец. Так великие знатоки и херят всю таблицу :) Условие не забываем.

XopoIII
16.07.2009, 14:35
Угу, молодец. Так великие знатоки и херят всю таблицу :) Условие не забываем.
у него в римере не было условия, вот и не написал =)

Krist_ALL
27.07.2009, 16:43
Есть вопросы:
1. Select * from test where not id=4
что выведет?
У меня выводит все записи у которых ид не 4, в книги же написано что ничего не должно выводить так как сервер райэсйьюэл оценивает выражение нот ид а затем проверяет соответствует ли оно 4,поскольку ид всегда не 0 то нот ид всегда равно 0 и не равно 4,следовательно бд ниче не выдаст. Я хз ваще! Мозг взорвался. У меня результат с ид 1,2,3,5,6 а у них пустой! И с нот ваще пипец! В книге одно у меня другое. У мну версия 5.0.45.

FireFenix
27.07.2009, 18:07
ибо здесь двоякая ситуация => разные версия мускуля по разному реагируют

NOT, !
Logical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is non-zero, and NOT NULL returns NULL.
т.е.

mysql> SELECT * FROM test;
+----+----------+
| id | num |
+----+----------+
| 1 | 148 |
| 2 | 68767867 |
+----+----------+
2 rows in set (0.00 sec)


mysql> SELECT * FROM test WHERE NOT(id)=null;
Empty set (0.00 sec)

mysql> SELECT * FROM test WHERE !(id)=null;
Empty set (0.00 sec)


mysql> SELECT * FROM test WHERE NOT(id)=false;
+----+----------+
| id | num |
+----+----------+
| 1 | 148 |
| 2 | 68767867 |
+----+----------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM test WHERE !(id)=false;
+----+----------+
| id | num |
+----+----------+
| 1 | 148 |
| 2 | 68767867 |
+----+----------+
2 rows in set (0.00 sec)


mysql> SELECT * FROM test WHERE NOT(id)=true;
+----+----------+
| id | num |
+----+----------+
| 2 | 68767867 |
+----+----------+
1 row in set (0.00 sec)

mysql> SELECT * FROM test WHERE !(id)=true
Empty set (0.00 sec)


Вывод:
WHERE NOT id=2 интерпретируется как id!=2
WHERE ! id=2 интерпретируется как !(id=2)

p.s. моя версия - 5.1.35

Krist_ALL
27.07.2009, 18:29
Спасибо! Мутное всеже дело. Как можно от версии к версии так глобальна менять действия операторов!

Krist_ALL
28.07.2009, 16:43
Делаю запрос селект наме фром а1 иннер джоин а2 юзе (ид)
в обоих таблицах есть колонка наме и бд орет.Как тада быть?


2. Установил мускул,пишет ошибка юзинг пас но. Ключ -u root и хз. Непускает(

Byrger
28.07.2009, 17:27
Как удалить из MySQL дубликаты?

Pashkela
28.07.2009, 17:43
ну самое изящное, что я видел:

ALTER IGNORE TABLE table ADD UNIQUE INDEX (field)

Krist_ALL
04.08.2009, 19:40
Какая ширина типа будет,если в скобках не указывать ее при создании таблицы? Create table (a int unsigned)

Architek86
04.08.2009, 20:37
Есть две таблицы: `geo_cities` и `puppy_listings`.
В первой таблице - список городов, во второй - объявления (титл, текст, city_id города согласно таблице `geo_cities`).
Как вывести список только тех городов, city_id которых есть в объявлениях?
Т.е. нужен запрос наподобие как-то так:
"SELECT * FROM `geo_cities` WHERE `geo_cities`.city_id == (`puppy_listings`.city_id для любой строчки таблицы `puppy_listings`) ORDER BY city_name ASC"
Реально ли сделать так?

omfg
04.08.2009, 20:42
Ты же сам ответил на свой вопрос (: как-то так

SELECT geo_cities.id FROM geo_cities , puppy_listings WHERE geo_cities.city_id = puppy_listings.city_id ORDER BY geo_cities.city_name ASC

Architek86
04.08.2009, 21:26
Ты же сам ответил на свой вопрос (: как-то так
О как :D интересная тема...

Architek86
04.08.2009, 21:42
Нее, не катит.. сделал так, но вот беда: он выводит в списке название города (geo_cities.city_name) столько раз, сколько его geo_cities.city_id упоминается в объявлениях (т.е. в таблице puppy_listings).. что же, если решения на sql нет, попробую в php убрать повторяющиеся элементы :)

Krist_ALL
04.08.2009, 21:57
SELECT distinct geo_cities.id FROM geo_cities, puppy_listings WHERE geo_cities.city_id = puppy_listings.city_id ORDER BY geo_cities.city_name ASC

distinct устранит дубликаты в выводе

FireFenix
04.08.2009, 22:57
ёпт, давно изобрели GROUP BY

SELECT geo_cities.*
FROM geo_cities, puppy_listings
WHERE geo_cities.city_id = puppy_listings.city_id
GROUP BY geo_cities.city_name
ORDER BY geo_cities.city_name ASC

WAYS
08.08.2009, 11:16
ёпт, давно изобрели GROUP BY
Что оно дает?

-JC-
09.08.2009, 03:27
Выводит рез-тат для каждого города.

REDz
11.08.2009, 11:45
При двух одновременных соединений к одной таблице, последнее соединение обрывается. Ктонить знает параметр такой конфигурации? Потомучто я что-то не нашел...

Krist_ALL
11.08.2009, 11:54
вот подробный ман. мне кажется как раз по твоему вопросу. http://msdn.microsoft.com/ru-ru/library/ms187030.aspx

REDz
11.08.2009, 11:58
вот подробный ман. мне кажется как раз по твоему вопросу. http://msdn.microsoft.com/ru-ru/library/ms187030.aspx
спс конечно, но у мя mysql и linux)) Причем связь обрывается только если таблица занята другим соединением, а не вся база.

REDz
11.08.2009, 12:04
Да и кстати сам процесс "обрывания" своеобразный, сначало идет долгая загрузка страницы, как будто ждет места, а потом вылазит ошибка 504

dinar_007
11.08.2009, 12:24
REDz, сожет у тебя лимит на подключения, хотя это ппц невероятно...

REDz
11.08.2009, 12:27
Попытался cUNLOCKить и никаких изменений.

REDz
11.08.2009, 13:04
REDz, сожет у тебя лимит на подключения, хотя это ппц невероятно...
Ога... Хз че эт такое...

dinar_007
11.08.2009, 13:08
Ога... Хз че эт такое...
Ну, это ограничение обычно на бесплатных хостингах бывает (у тебя такой?)...... Купи нормальный хостинг за 10$/мес... Там обычно с этим всё норм...

REDz
11.08.2009, 13:13
Ну, это ограничение обычно на бесплатных хостингах бывает (у тебя такой?)...... Купи нормальный хостинг за 10$/мес... Там обычно с этим всё норм...
У меня свой серв)

REDz
11.08.2009, 15:50
Все, всем спасибо разобрался)
Был цикл в icq боте и в этом цикле соединение с бд. Тоесть каждую секунду бот запрос делал бд и тот их складывал. В итоге остальные запросы зависали. Проблему рашил довольно просто) Сделал постоянное соединение pconnect.

Patronik
11.08.2009, 18:48
Хочу создать свой форум на php. Разработал диаграмму структуры базы данных.
Посмотрите и исправте если не верно построил структуру.
http://keep4u.ru/imgs/b/2009/08/11/43/43ed73fa0438e4dfcfc686f13968da13.jpg

Пользователь (ключ пользователя, имя, логин, пароль, пользователь администратор, ...., емеил пользователя)

Раздел(ключ раздела, имя раздела)

Тема(ключ теми, имя теми)

Сообщение (ключ сообщения, имя сообщения)

diGriz
11.08.2009, 19:04
Пользователь (ключ пользователя, имя, логин, пароль, пользователь администратор, ...., емеил пользователя)

Раздел(ключ раздела, имя раздела)

Тема(ключ теми, имя теми)

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

Пользователь: id name login password role и т. д.
Раздел: id title
Тема: id title fk_id(связь с id в раздела)
Сообщение: id text fk_userid(связь с id пользователя) fk_theme(id темы)

Вот как то так.

Patronik
11.08.2009, 19:24
блин я в ворде рисовал, на скорую руку. А про связь я знаю но не знал как ее в скобках обозначить по руски. И кстати как в MySQL сделать связь между таблицами например сообщения и теми при создании самых таблиц, там вроде пишеться
CREATE TABLE messages (
id_messages PRIMARI KEY NOT NULL AUTO INCREMENT,
messages text,
как тут связь написать с таблицами пользователи и теми);

_StOnE_
12.08.2009, 18:31
блин я в ворде рисовал, на скорую руку. А про связь я знаю но не знал как ее в скобках обозначить по руски. И кстати как в MySQL сделать связь между таблицами например сообщения и теми при создании самых таблиц, там вроде пишеться
CREATE TABLE messages (
id_messages PRIMARI KEY NOT NULL AUTO INCREMENT,
messages text,
как тут связь написать с таблицами пользователи и теми);

CREATE TABLE messages (
id_messages int PRIMARI KEY NOT NULL AUTO INCREMENT,
messages text,
user_id int not null references users(user_id),
theme_id int not null references themes(theme_id)
)

может так?!

Patronik
13.08.2009, 09:31
CREATE TABLE messages (
id_messages int PRIMARI KEY NOT NULL AUTO INCREMENT,
messages text,
user_id int not null references users(user_id),
theme_id int not null references themes(theme_id)
)

может так?!

Нет не так)) Я уже написал)
CREATE TABLE messages (
id_messages int PRIMARI KEY NOT NULL AUTO INCREMENT,
messages text,
mes_user_id int not null,
mes_theme_id int not null,
FOREIGN KEY(mes_user_id) references users(user_id),
FOREIGN KEY(mes_theme_id) references themes(theme_id)
);

SaiRus
13.08.2009, 20:14
Подскажите пожалуйста:
1)TimeStamp(тип поля в MySQL)-содержит не просто дату и время, а набор данных отвечающих за нее?
2)есть записи в базе DateTime формата, если тип поля поменять на TimeStamp, как откорректировать значения? а то даты получаются не корректными...
3)есть поле "Id" - авто_инкремент... добавляя новую запись получается что записей к примеру две а третья добавляется 13ой, это нормально? или как сделать что бы она добавлялась 3й? подскажите пожалуйста я не сику в этом :(

dos999
14.08.2009, 11:56
1. Для информации http://www.mysql.ru/docs/man/DATETIME.html
2. почему некорректными? может длинна полей разная просто? или формат
3. вполне нормально. для порядкового номера используй либо отдельное поле, либо функцию которая получает этот номер.

SaiRus
14.08.2009, 12:49
datetime к примеру 2009-02-05 23:22:21, когда тип поля поставишь TimeStamp получиться типа 20090205232221 в итоге он выведет через strftime далеко не 2 мая и даже не 5 февраля, а год поставит какой нибудь 11 :) ну да ладно...

SaiRus
15.08.2009, 17:16
FROM table WHERE filter=1/// из таблицы где фильтр равен 1.что за Filter? сорри за глупости :)

RESPECТ
15.08.2009, 17:49
SaiRus, ну, например, такой SQL запрос: SELECT * FROM table WHERE filter=1 - из таблицы table выбираем все записи, где filter равен еденице... т.е. в таблице, например, есть столбец с названием filter, и все записи в которых значение filter будет равно 1 являются результатом запроса, иначе - нет.

Patronik
15.08.2009, 19:50
Подскажите пожалуйста:
1)TimeStamp(тип поля в MySQL)-содержит не просто дату и время, а набор данных отвечающих за нее?
2)есть записи в базе DateTime формата, если тип поля поменять на TimeStamp, как откорректировать значения? а то даты получаются не корректными...
3)есть поле "Id" - авто_инкремент... добавляя новую запись получается что записей к примеру две а третья добавляется 13ой, это нормально? или как сделать что бы она добавлялась 3й? подскажите пожалуйста я не сику в этом :(

Для того чтобы третяя запись добавлялась в автоинкременте 3-тей а не 13-той пересоздай таблицу заново и введи все значения сначала.

daniel_1024
15.08.2009, 22:39
у меня есть пароли от базы мускуль, как к ней приконнектититься, подскажите путь к ней.

Pashkela
15.08.2009, 22:47
Там же, где ты и взял пароли от БД

ILYAtirtir
15.08.2009, 23:51
у меня есть пароли от базы мускуль, как к ней приконнектититься, подскажите путь к ней.
Попробуй найти phpmyadmin,может подойдет туда пароли,обычно /phpmyadmin/ или /pma/. Или пробуй коннектится на порт 3306

daniel_1024
16.08.2009, 14:23
Там же, где ты и взял пароли от БД
я их взял скулей из таблицы mysql.users, расшифровал....

Pashkela
16.08.2009, 15:19
пути (сервер ДБ) можно прочитать только в конфигах обычно, плюс удаленный доступ очень редко попадается (редковато). А дальше слушай ILYAtirtir - ищи phpmyadmin, если не под .htaccess - считай повезло.

xSlon
19.08.2009, 22:38
Читаю книжку по php,есть глава про создание интернет-магазина,есть код создания бд,пытаюсь сделать по примеру но чуть-чуть другое - выходит только ошибка.
Parse error: parse error, unexpected T_ELSE in z:\home\localhost\www\FirstSite\setup_bd.php on line 47

<?
//Подключаем шаблон
require "shablon.php";
//выводим шаблон
echo $head;
//создаем БД
if(!mysql_connect($server,$login,$psswd))
{
echo"Ошибка сервера MySQL";
echo"</body></html>";
exit;
}
echo "Создаем БД";
mysql_createdb($BD);
echo mysql_error(mysql_errno());
if(mysql_errno() == 0)
{
echo "БД создана!Создаем таблицу 1...";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 1 (
login char(16) primary key,
psswd char(16) not null,
)');
echo mysql_error();
If (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO users values("test","test")');
echo "Данные добавлены";
echo "А теперь создаем Таблицу 2";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 2 (
name char(16) primary key,
sostav char(128),
opisanie text,
)');
echo mysql_error();
If (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO clans values("Первый","Нет...","Нет пока")');
echo "Данные добавлены";
}
else echo "ошибка при создании таблицы";
else
echo "Ошибка при создании БД ".mysql_error();
}
}
?>
Подскажите пожалуйста,что не так...

Pashkela
19.08.2009, 22:44
а потому что вот так писать надо, не зря правила придумали:


<?php
if (условие) {
.........
if (условие) {
...............
...............
}
}
?>

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

Сделаешь так - ошибка станет настолько очевидно смешной, что тебе даже смешно не будет

mailbrush
19.08.2009, 22:44
<?php
//Подключаем шаблон
require "shablon.php";
//выводим шаблон
echo $head;
//создаем БД
if (!mysql_connect($server, $login, $psswd))
{
echo "Ошибка сервера MySQL";
echo "</body></html>";
exit;
}
echo "Создаем БД";
if (mysql_create_db($BD))
{
echo mysql_error(mysql_errno());
if (mysql_errno() == 0)
{
echo "БД создана!Создаем таблицу 1...";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 1 (
login char(16) primary key,
psswd char(16) not null,
)');
echo mysql_error();
if (mysql_errno() === 0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO users values("test","test")');
echo "Данные добавлены";
echo "А теперь создаем Таблицу 2";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 2 (
name char(16) primary key,
sostav char(128),
opisanie text,
)');
echo mysql_error();
if (mysql_errno() === 0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO clans values("Первый","Нет...","Нет пока")');
echo "Данные добавлены";
}
else echo "ошибка при создании таблицы";
}
}
}
else
{
echo "Ошибка при создании БД " . mysql_error();
}

?>

FireFenix
19.08.2009, 22:46
гоанокод в if'ах

наверное должно быть так

<?php
//Подключаем шаблон
require "shablon.php";

//выводим шаблон
echo $head;

//создаем БД
if(!mysql_connect($server,$login,$psswd))
{
echo "Ошибка сервера MySQL";
echo "</body></html>";
exit;
}

echo "Создаем БД";
mysql_createdb($BD);
echo mysql_error(mysql_errno());

if(mysql_errno() == 0)
{
echo "БД создана!Создаем таблицу 1...";
mysql_select_db($BD);
echo mysql_error();

mysql_query('Create table 1 (
login char(16) primary key,
psswd char(16) not null,
)');

echo mysql_error();

if (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO users values("test","test")');
echo "Данные добавлены";
echo "А теперь создаем Таблицу 2";
mysql_select_db($BD);
echo mysql_error();

mysql_query('Create table 2 (
name char(16) primary key,
sostav char(128),
opisanie text,
)');
echo mysql_error();

if (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO clans values("Первый","Нет...","Нет пока")');
echo "Данные добавлены";
} else {
echo "ошибка при создании таблицы";
}
} else{
echo "Ошибка при создании БД ".mysql_error();
}
}

?>

xSlon
20.08.2009, 01:29
Pashkela
mailbrush
FireFenix
Спасибо большое,докумекал сам уже...действительно,смешная ошибка :(


Поставьте пожалуйста по плюсу вышеуказанным людям...

xSlon
20.08.2009, 03:05
Блин,теперь это показывает(((
Создаем БД
Notice: mysql_createdb(): This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead. in z:\home\localhost\www\site_cw\setup_bd.php on line 15

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in z:\home\localhost\www\site_cw\setup_bd.php on line 16
Ошибка при создании БД Can't create database 'all'. Database exists
<?
//Подключаем шаблон
require "shablon.php";
require "options.php";
//выводим шаблон
echo $head;
//создаем БД
if(!mysql_connect($server,$login,$psswd))
{
echo"Ошибка сервера MySQL";
echo"</body></html>";
exit;
}
echo "Создаем БД";
mysql_createdb($BD); //15ая строка
echo mysql_error(mysql_errno()); //16ая строка
if(mysql_errno() == 0)
{
echo "БД создана!Создаем таблицу 1...";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 1 (
login char(16) primary key,
psswd char(16) not null,
)');
echo mysql_error();
If (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO users values("test","test")');
echo "Данные добавлены";
echo "А теперь создаем Таблицу 2";
mysql_select_db($BD);
echo mysql_error();
mysql_query('Create table 2 (
name char(16) primary key,
sostav char(128),
opisanie text,
)');
echo mysql_error();
If (mysql_errno() ===0)
{
echo "Таблица создана.Добавляем первичные данные.";
mysql_query('INSERT INTO clans values("Первый","Нет...","Нет пока")');
echo "Данные добавлены";
}
}
else echo "ошибка при создании таблицы";
//создать таблицу кв
}
else
echo "Ошибка при создании БД ".mysql_error();
?>

gisTy
20.08.2009, 05:32
а потому что вот так писать надо, не зря правила придумали:


<?php
if (условие) {
.........
if (условие) {
...............
...............
}
}
?>

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

Сделаешь так - ошибка станет настолько очевидно смешной, что тебе даже смешно не будетесть как минимум два стиля оформления...

mon$TriK
20.08.2009, 10:12
Блин,теперь это показывает(((
Создаем БД
Notice: mysql_createdb(): This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead. in z:\home\localhost\www\site_cw\setup_bd.php on line 15

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in z:\home\localhost\www\site_cw\setup_bd.php on line 16
Ошибка при создании БД Can't create database 'all'. Database exists
а зачем же ты базу каждый раз создаешь?))
она уже существует :)

Shadrin
20.08.2009, 15:53
когда расковыриваю иньекции mysql версии >5 часто присутствует база с названием "mysql " ее структура одинаковая на всех сайтах где я ее видел ,там есть логин и пароль в mysql5.
Но он не куда неподходит(
Вопрос такой что это за база и для чего она нужа ?
Вот ее таблицы
Tables:
columns_priv
db
func
help_category
help_keyword
help_relation
help_topic
host
proc
procs_priv
tables_priv
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
user
спасибо

Shadrin
20.08.2009, 17:07
а как проверить,закрыт доступ или нет ?

b3
20.08.2009, 18:06
а как проверить,закрыт доступ или нет ?
Зайди в phpmyadmin и если там есть БД с именем mysql то попробуй сделать выборку из этой таблици, или же сделай :
select * from mysql.user если нет доступа то вылезет ошибка.

<?php

$conn = mysql_connect("localhost", "root", "");

if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}

if (!mysql_select_db("mysql")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}

$sql = "SELECT user, password
FROM user
WHERE 1";

$result = mysql_query($sql);

if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}

if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}

// До тех пор, пока в результате содержатся ряды, помещаем их в
// ассоциативный массив.
// Заметка: если запрос возвращает только один ряд -- нет нужды в цикле.
// Заметка: если вы добавите extract($row); в начало цикла, вы сделаете
// доступными переменные $userid, $fullname, $userstatus.
while ($row = mysql_fetch_assoc($result)) {
echo $row["user"];
echo $row["password"];

}

mysql_free_result($result);


?>

INSEPT
22.08.2009, 11:47
Кокая прога лутшая из бесплатних для защиты бд mysql?

PaCo
22.08.2009, 11:50
Кокая прога лутшая из бесплатних для защиты бд mysql?
Brain.

Pashkela
22.08.2009, 17:48
mysql БД не надо защищать, с ней просто надо правильно работать