Просмотр полной версии : [sql] Вопросы по БД
Firewall + блокировать сетевой трафик = максимальная защита :D
блокировать полностью =)
jawbreaker
26.08.2009, 20:41
Пишу клиентское приложение на QT которое должно обновляться. Соответственно есть сервер БД(MySQL) и при старте программы она лезет в БД чтобы проверить не появилась ли новая версия (в БД есть ссылка на новую версию). Клиент и сервер общаются через защищённое соединение.
Возникает вопрос, может ли злобный хакер получить информацию, которую я передаю и скачать мою программку нахаляву и как с этим бороться?
Patronik
02.09.2009, 12:46
Скажите какой запрос к базе лучше для нахождения логина и пароля? Очень надо знать.
$in_login = $_POST['login'];
$in_pas = $_POST['pas'];
$sql_query = "SELECT * FROM user";
$resalt = mysql_query($sql_query);
while($row = mysql_fetch_array($resalt))
{
if (($in_login == $row['user_login']) && ($in_password == $row['user_password']))
===========================================
ИЛИ
sql_query = "SELECT * FROM user WHERE user_login = $in_login AND user_password = $in_password";
я особо не селен в sql, но имхо если юзать второй запрос то будет меньше кода останеться только переменную resalt обработать+таблицу полностью грузить не надо+экономишь время без цикла :)
Pashkela
02.09.2009, 14:05
$in_login = $_POST['login'];
$in_pas = $_POST['pas'];
$sql_query = "SELECT * FROM `user` where `user_login` = '$in_login' and `user_password` = '$in_pas'";
При переносе форума vBulletin столкнулся с небольшой траблой, вместо букв "ш" пишет "�?"
Что ни так? Хелп!!! :(
Gray_Wolf
10.09.2009, 19:17
При переносе форума vBulletin столкнулся с небольшой траблой, вместо букв "ш" пишет "�?"
Что ни так? Хелп!!! :(
Обычно подобное можно увидеть когда текст в UTF8, а БД настроена на cp1251;
Gray_Wolf, да utf и cp1251 это ясно. Как дамп исправить?
Тут есть статья http://hostinghelp.biz/content/решение-проблем-с-нарушением-отображения-букв-ш-и-и-в-резултате-неудачной-перекодировки-mysq
но там перл :(
Gray_Wolf
10.09.2009, 19:51
Gray_Wolf, да utf и cp1251 это ясно. Как дамп исправить?
Тут есть статья http://hostinghelp.biz/content/решение-проблем-с-нарушением-отображения-букв-ш-и-и-в-резултате-неудачной-перекодировки-mysq
но там перл :(
Ну а что вам мешает сделать дамп и поменять кодировку в какомнить notepad++?
Хотя если любите извращения по можете попробовать что-то типо:
$str=str_replace («И»,"& #1048;",$str);
$str=str_replace («ш»,"& #1096;",$str);
только между "&" и "#" пробел уберите.
Ну а что вам мешает сделать дамп и поменять кодировку в какомнить notepad++?Нет смысла, уже менял, нету букв "ш" и "И" вместо них квадраты и знаки вопроса. Это болезнь. Как бороться?
Pashkela
10.09.2009, 22:30
Поменять все квадраты и знаки вопроса на "ш" и "и" выцепив hex-код квадратов и знаков вопросов
Pashkela, а как их выцепить?
Pashkela
11.09.2009, 00:26
писал вроде уже именно тебе -
1. Переводим весь текст hex:
$text = bin2hex($text);
2. Потом примерно в таком цикле:
$count = strlen($text);
for ($i=0;$i<$count;$i++)
if ($text{$i} тут условие) {
.........
// Только тут не забываем, что hex любого символа состоит из двух значений, для условий в цикле
}
}
диапазон "нормальных букв" вернее их hex-кодов известен? Известен. Значит пишем функцию, посимвольно перебирающую текст, выбирающую hex-значения не из диапозона кроме сиволов "пробел" и "перенос строки" и прочего дерьма (спец символов). Получим твои "ш" и "и" в непонятной кодировке или просто засранные при дампе, потом обычный str_replace непонятных символов на понятные hex коды "ш" и "и", потом преобразование полученных данных в хексе обратно в читабельный вид вот такой функцией:
function hex2bin($hh) {
if (!is_string($hh)) return null;
$rr='';
for ($aa=0; $aa<strlen($hh); $aa+=2) { $rr.=chr(hexdec($hh{$aa}.$hh{($aa+1)})); }
return $rr;
}
ЗЫЖ Или еще проще - просто выкупаешь hex-коды этих квадратов и знаков вопросов, весь текст в hex (как описано выше), потом сразу str_replace, потом обратно в текст (функция выше)
/*
* Исправление кодировки букв "ш" и "И" в MYSQL
* автор: Nc_Soft
* 18.07.09
*/
/*
Частенько встречается при переносе бд, либо при шаманстве с кодировками
буквы "ш" и "И" оказываются битыми (речь идет о utf-8 конечно)
буква "ш" = chr(209).chr(63) / правильно chr(209).chr(136)
буква "И" = chr(208).chr(63) / правильно chr(208).chr(152)
Чтобы пофиксить делаем 2 запроса
*/
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) )
); :)
superboy4
13.09.2009, 17:53
Как можно узнать кодировку базы данных?
Каким запросом?
Введи:
show variables;
И будет тебе счастье
Architek86
18.09.2009, 21:57
Народ, дано в MySQL поле типа text. Как добавлять в него данные так, что бы они не заменяли содержимое поле, а дополняли его, т.е. приписывались бы к содержимому вконце?
как в условие селект игнорировать регистр букв
Pashkela
24.09.2009, 14:25
select LOWER(...)
select * from .. where LOWER(имя поля???) =$var так ???
Pashkela
24.09.2009, 15:17
ну да
Добрый вечер уважаемые гуры mysql! :)
У меня такой вопросец: можно ли сослаться к столбцу "country" таблички не по имени а типа вот так - ORDER BY `column[4]`?
Или это область фантастики? :)
Добрый вечер уважаемые гуры mysql! :)
У меня такой вопросец: можно ли сослаться к столбцу "country" таблички не по имени а типа вот так - ORDER BY `column[4]`?
Или это область фантастики? :)
траляля ORDER BY 4
траляля ORDER BY 4И будет сортировать по четвёртому столбцу? Или пятому?
И будет сортировать по четвёртому столбцу? Или пятому?
Можно было б и попробовать запустить :) По 4-му
VDShark, спасибо! Всё работает! :)
crazy~driver
29.09.2009, 00:40
Народ, дано в MySQL поле типа text. Как добавлять в него данные так, что бы они не заменяли содержимое поле, а дополняли его, т.е. приписывались бы к содержимому вконце?
если чисто в мюслях то
update table set field=CONCAT(field,'aaaaa');
допишет в field строку aaaaa
у меня работает и не только с полем text ;)
referer1
29.09.2009, 17:59
а вот я пытаюсь изменить косяк в базе с отображением буквы Ш и И...
Но при попытке выполнить запрос мне выдает ошибку
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) )
);
#1146 - Table 'madan21_mad.tbl' doesn't exist
Вот я не могу врубиться что нужно вписывать вместо tbl ? вводил имя таблица к примеру jos3_banner но тогда ошибка была вида #1054 - Unknown column 'pole' in 'field list' хелп ми плиззз :'(?
Architek86
29.09.2009, 20:33
crazy~driver, благодарю.
Однако до полного счастья осталось разобраться с ещё одним вопросом. Уверен, это реализуется легко. Есть значит выбранная строка из базы. Надо сделать запрос в базу так, что бы он выдал ещё 5 строк: 3 предыдущие и 2 более новые от данной строки (сортируя по дате создания полей - `time`). Каг?
Выборка по полю id с auto_increment врядли подойдёт.. насколько я помню, при удалении строки список id не пересчитывается и мы можем иметь такие записи:
id name
5 aaa
6 bbb
8 ccc
В итоге вместо ожидамого id 7, предшествующему id 8, мы получим ошибку.
crazy~driver
29.09.2009, 22:00
а вот я пытаюсь изменить косяк в базе с отображением буквы Ш и И...
Но при попытке выполнить запрос мне выдает ошибку
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);
UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) )
);
#1146 - Table 'madan21_mad.tbl' doesn't exist
Вот я не могу врубиться что нужно вписывать вместо tbl ? вводил имя таблица к примеру jos3_banner но тогда ошибка была вида #1054 - Unknown column 'pole' in 'field list' хелп ми плиззз :'(?
referer1 слушай у меня твой запрос полностью пашет.
я загнал в mysql-front запрос и единственное что изменил это поубирал кое - где кавычки.
Вот сам запрос:
UPDATE aaa SET vvv= REPLACE(
'vvv',
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);
ааа - таблица
vvv - столбец
Поиграйся с кавычками и пробелами. Может в этом косяк или укажи имя таблицы полное (я имею в виду с бд, например document.aaa)
Neoveneficus
29.09.2009, 23:55
crazy~driver, благодарю.
Однако до полного счастья осталось разобраться с ещё одним вопросом. Уверен, это реализуется легко. Есть значит выбранная строка из базы. Надо сделать запрос в базу так, что бы он выдал ещё 5 строк: 3 предыдущие и 2 более новые от данной строки (сортируя по дате создания полей - `time`). Каг?
Выборка по полю id с auto_increment врядли подойдёт.. насколько я помню, при удалении строки список id не пересчитывается и мы можем иметь такие записи:
id name
5 aaa
6 bbb
8 ccc
В итоге вместо ожидамого id 7, предшествующему id 8, мы получим ошибку.
Я бы тебе посоветовал сделать два запроса к БД. Объединить их никак не получилось из-за limit'ов. Может, конечно, мало думал, но вариант пока только такой. Если кто-то объединит - будет интересно посмотреть, как это можно сделать.
SELECT * FROM `articles` WHERE `unixtime` < (SELECT `unixtime` FROM `articles` WHERE `articleid`='53') ORDER BY `unixtime` DESC limit 0,3;
SELECT * FROM `articles` WHERE `unixtime` >= (SELECT `unixtime` FROM `articles` WHERE `articleid`='53') ORDER BY `unixtime` ASC limit 0,3;
FireFenix
03.10.2009, 12:55
Если передаётся какой-то индетификатор строки, то почему незя с ним передавать абсолютное положение строки в БД?
<a href="?act=show&id=53&pos=153">Строка 153</a>
mysql_query('SELECT * FROM arcticles LIMIT ' . $pos - 3 . ', 6');
думаю это более рациональное
Neoveneficus
03.10.2009, 15:29
По какому принципу формируется твоя ссылка?
Представь, что человеку нужно отобразить статью по id (передается GET'ом) и отобразить две более ранних и три более поздних, если есть...
как ты это сделаешь, если зависимоть только от id?
И еще, твоя конструкция не будет работать, если $pos меньше двух.
ломаю сайт при пподстановки ковычки пишетselect * from `www_referer` where `from_referer`='' and `to_referer`='/consultation/index.php?consultation=2'' 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 ''/consultation/index.php?consultation=2''' at line 3
какой еще рефер нужен перебрал столбцы до 30 все одно и тоже
ломаю сайт при пподстановки ковычки пишет
какой еще рефер нужен перебрал столбцы до 30 все одно и тоже
ошибся темой - тебе сюда (http://forum.antichat.ru/threadnav46016-925-10.html)
кавычку в форму пихаешь?
+давай линк на ресурс.
ЗЫ пробуй ' OR 1=1#, если повезет -- получишь инфу из `www_referer`
Суть вопроса:
Есть 2 таблицы, 1 и 2.
в табл.1 есть поля - юзернейм,домен,путь
в табл.2 есь поля - юзернейм, пасс.
Юзернеймы одинаковые, но порядок и ИД - не совпадают.
то есть необходимо какое-то сравнение поля юзернейм чтоле, чтобы брал из второй таблицы только того юзера и пароль, который в данный момент выбран из первой таблицы))
Внимание, Вопрос:
(Что? ГДе? Когда? отдыхает =))
Какой запрос должен быть,что б я получил в итоге в файле или в таблице или в на экране, данные по примерно такому шаблону:
1.username,1.domain,1.path,2.pass
где 1- первая табла, 2 - вторая.
Суть вопроса:
Есть 2 таблицы, 1 и 2.
в табл.1 есть поля - юзернейм,домен,путь
в табл.2 есь поля - юзернейм, пасс.
Юзернеймы одинаковые, но порядок и ИД - не совпадают.
то есть необходимо какое-то сравнение поля юзернейм чтоле, чтобы брал из второй таблицы только того юзера и пароль, который в данный момент выбран из первой таблицы))
Внимание, Вопрос:
(Что? ГДе? Когда? отдыхает =))
Какой запрос должен быть,что б я получил в итоге в файле или в таблице или в на экране, данные по примерно такому шаблону:
1.username,1.domain,1.path,2.pass
где 1- первая табла, 2 - вторая.
SELECT
`t1`.username, `t1`.domain, `t1`.path, `t2`.pass
FROM `t1` INNER JOIN `t2` ON `t1`.username = `t2`.username
Спасибо большое!) Работает.
superboy4
04.10.2009, 15:58
Я в виртуальной машине Ubuntu 9.04 и у меня есть возможность поднять репу кому-либо!
А как мне сменить кодировку базы данных или всего Mysql на utf-8??
зы: phpmyadmin у меня нету
посоветуйте простой и элегантный способ.
ПО-МА-ГИ-ТЕ
superboy4
04.10.2009, 16:34
я уже замучился, ничего не помогает. Хочу чтобы в Mysql была кодировка UTF-8, а у меня сейчас latin1 :mad: :mad:
ZirroCool
04.10.2009, 16:51
При создании новой БД можно явно указать кодировку:
mysql> create database 'database_name' DEFAULT CHARACTER SET utf8
mysql> COLLATE utf8_bin;
Если вам нужно поменять кодировку для уже существующих таблиц, выполните следующую команду:
mysql> ALTER TABLE `table_name` DEFAULT CHARACTER SET utf8 COLLATE
mysql> utf8_general_ci;
crazy~driver
04.10.2009, 22:55
я уже замучился, ничего не помогает. Хочу чтобы в Mysql была кодировка UTF-8, а у меня сейчас latin1 :mad: :mad:
superboy4, если у тя мюсли версии 5.x, то сделай следующее:
в конфигурационном файле /etc/my.cnf, раздел mysqld
добавь следующее:
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake
а в раздел mysqldump добавь только
default-character-set=utf8
Коли версия другая, отпишись че то придумаем :)
Здравствуйте,в общем раньше с мускулом сам не работал!Не приходилось писать подключения или еще что-либо!Сейчас столкнулся с очень таки нужной темой,проблема в том что я не представляю пока что как и что!
Суть:сделать что-то вроде регистрации!
Подскажите не на примере а на словах и с помощью каких функций в php можно сделать следующее:
Юзверь,заходит на страницу,вбивает данные в форму!Данные с этой формы вбиваются в мускул базу!
Расскажите как,что и почему!
Если кто может показать пример,буду премного благодарен!Спасибо заранее
$query =mysql_query("INSERT INTO `table_name` (`id`,`name`,`pole3`) values (null,'мия','значение')
вот так через пхп заносят в мускул
$query =mysql_query("INSERT INTO `имя_таблицы_в_базе` (`имя_формы1`,`имя_формы_2`,`3`) values (null,'мия','значение')
то есть так это да?Ну в последнем значения форм,это я уже понял!Или там ид,имя формы и поле?Не совсем просто понял
А как вообще подключится и создать таблицу,той же php функцией!
$query =mysql_query("INSERT INTO `имя_таблицы_в_базе` (`имя_формы1`,`имя_формы_2`,`3`) values (null,'мия','значение')
то есть так это да?Ну в последнем значения форм,это я уже понял!Или там ид,имя формы и поле?Не совсем просто понял
А как вообще подключится и создать таблицу,той же php функцией!
$query =mysql_query("INSERT INTO `имя_таблицы_в_базе` (`столбец(id)`,`cтолбец(name)`,`3`) values (null,'мия','значение')
Простой пример с добавлением данных в бд.
<?php
//подключаешься к БД
$dblocation="localhost";
$dbname="mdb";
$dbuser="root";
$dbpassword="";
$db_connect = mysql_connect($dblocation,$dbuser,$dbpassword);
$db_select = mysql_select_db($dbname,$db_connect);
$login =$_POST['login']; //данные с формы
$password =$_POST['password'];
$userAdd = mysql_query("INSERT INTO
users (login,password)
VALUES
('$login', '$password'");
?>
Ссылка по теме:
http://php.su/mysql/?functions
diGrizСпасибо с этим выручил!
И последний на сегодня вопросец,как теперь вытащить из базы эти же логин и пасс?
То есть к примеру вывести их в переменную $db_login и $db_pass!
Очень выручили
Например так:
$query = mysql_query("SELECT login, password FROM users WHERE login = '$login' AND password = '$password'");
$result = mysql_fetch_array($query);
echo $result['login'];
Спасибо,этот код выведет как я понял все из поля логин?Ну если у меня в таблице будет логин1 логин2 и т.д!Как будет тогда?
Спасибо,этот код выведет как я понял все из поля логин?Ну если у меня в таблице будет логин1 логин2 и т.д!Как будет тогда?
Вот так:
$query = mysql_query("SELECT * FROM users");
while($result = mysql_fetch_array($query)) {
echo $result['login']."<br />";
}
Все,огромное человеческое спасибо!
нужно проэкранировать код вставки видео с youtube.com .
Код в формате html заносится в базу
чем лучше сделать
(скрипт самописный)
Один из способов
UPDATE t1 SET url = REPLACE(url, 'site.ru/forum', 'forum.site.ru') WHERE INSTR(url, 'site.ru/forum') > 0;
krypt3r, мне нужно в базе данных во всех сообщениях булки поменять через phpmyadmin
А какая разница-то? Под рукой булки нет, а на примере IPB будет
UPDATE ibf_posts SET post = REPLACE(post, 'site.ru/forum', 'forum.site.ru') WHERE INSTR(post, 'site.ru/forum') > 0;
что такое post?
post - это поле.
Для vBulletin это будет выглядеть так
UPDATE forum_post SET pagetext = REPLACE(pagetext, 'site.ru/forum', 'forum.site.ru') WHERE INSTR(pagetext, 'site.ru/forum') > 0;
forum_post - название таблицы (forum_ - префикс, по дефолту его нет.)
pagetext - название поля
M@ZAX@KEP
15.10.2009, 17:58
У меня проблемы с добавлением в базу русского текста.
При установке и настройке SQL-сервера я выбрал кодировку cp-1251 (кириллица кароче), в файле my.ini прописал в блоке [client] вот такое:
character-sets-dir="F:/Progs/Apache/MySQL/share/charsets"
(всё правильно, раз 5 проверял :D) Далее в блок [mysqld] вбацал:
character-sets-dir="F:/Progs/Apache/MySQL/share/charsets"
init-connect="SET NAMES cp1251"
Тобишь по идее кириллица должна работать.
Поехали:
USE test;
CREATE TABLE `news` (
`id` int(11) NOT NULL default '0',
`date` varchar(8) NOT NULL default '',
`time` varchar(7) NOT NULL default '',
`caption` varchar(50) NOT NULL default '',
`text` text NOT NULL,
`avtor` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `news` VALUES (1, '23/03/07', '12:30', 'Здравствуй вася :)', 'Бла-бла-бал :)\r\nи прочий ненужный текст... :P', 'MX');
INSERT INTO `news` VALUES (2, '24/03/07', '11:10', 'А русский не робит', 'А вот кириллица нифига не отображаццо\r\nВыглядит как аброкадабра просто((', 'MX');
Всё робит нормально, но кириллические символы заносятся в БД неправильно. Они начинают правильно отображаться на странице только если поставить кодировку cp866! То есть текст почему-то заносится в базу не в cp-1251, а в долбаном cp866! :confused: Подскажите, пожалуйста как это исправить и что именно я сделал нитаг? :(
Patronik
16.10.2009, 13:28
файли sql ето бинарный тип даных, Mysql может перекодировать в любую кодировку.
Попробуй поставить в файле с подключением к серверу поле подключения две строки
$sqlencod = "set names cp1251";
mysql_query($sqlencod);
и сохрани, должно помочь.
Почему при таком запросе берётся только одна запись подходящее под условие `ankets`.`order_id` = `posred`.`id` а не все ?
UPDATE `ankets`,`posred`
SET `priority` = CASE WHEN `tp` != "-1" AND `balance` >= `tp`
THEN `tp` WHEN `priority` != 0 AND `balance` < `priority`
THEN 0 ELSE `priority` END,
`balance` = CASE WHEN `balance` >= `tp` AND `tp` != "-1"
THEN `balance` - `tp` WHEN `priority` != 0
THEN `balance` - `priority` ELSE `balance` END ,`tp` = "-1"
WHERE `ankets`.`order_id` = `posred`.`id`
Драсте
Мне нужно создать БД sqlite. Пробовал програмкой SQLite expert. В базе даных всего одна таблица и два поля id и text. Собсно когда пытаюсь приконектиццо к ней выдает такую ошибку
arning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in Z:\home\sql\www\sqnews.php5 on line 6
Warning: sqlite_query() expects parameter 1 to be resource, string given in Z:\home\sql\www\sqnews.php5 on line 10
Warning: sqlite_fetch_array() expects parameter 1 to be resource, null given in Z:\home\sql\www\sqnews.php5 on line 11
Помогайте плз
Есть таблица hack, существует поле count которое равняеться 1
Как одним запросом делать что бы count увеличивалось на один каждым запросом !
Есть таблица hack, существует поле count которое равняеться 1
Как одним запросом делать что бы count увеличивалось на один каждым запросом !
UPDATE `table`SET count=count+1
я правильно понял?
Может быть, автоинкремент повесить на поле?
Объясните, пожалуйста такое. 1, 2 одного и тоже. Какая прицнипиальная разница?
$query = "SELECT password FROM users WHERE name='".$_POST['login']."'";
$login_authentication = mysql_query($query);
if(mysql_num_rows($login_authentication) > 0)
{
// Получаем пароль
$password = mysql_result($login_authentication,0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
echo "Hello, $login";
}
}
$query = "SELECT * FROM users where name='".$login."' and pass = '".$password."';
crazy~driver
29.10.2009, 20:56
Привет подскажите, есть ли мюслях запрос, чтобы искал заданное значение по всей бд
Привет подскажите, есть ли мюслях запрос, чтобы искал заданное значение по всей бд
SELECT * FROM *
просто
Patronik
01.11.2009, 03:42
Объясните, пожалуйста такое. 1, 2 одного и тоже. Какая прицнипиальная разница?
$query = "SELECT password FROM users WHERE name='".$_POST['login']."'";
$login_authentication = mysql_query($query);
if(mysql_num_rows($login_authentication) > 0)
{
// Получаем пароль
$password = mysql_result($login_authentication,0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
echo "Hello, $login";
}
}
$query = "SELECT * FROM users where name='".$login."' and pass = '".$password."';
Принципиальной разници нету. Во втором варианте код просто короче получиться.
Подскажите какой параметр или что либо еще нужно поставить чтобы записи в базе формировались по значению,к примеру в поле А значение 5,а в боле B значение 7
Как сделать чтобы B соответственно выводилось впереди?
Если так нельзя,подскажите что можно с таким выводом в PHP сделать
Подскажите какой параметр или что либо еще нужно поставить чтобы записи в базе формировались по значению,к примеру в поле А значение 5,а в боле B значение 7
Как сделать чтобы B соответственно выводилось впереди?
Если так нельзя,подскажите что можно с таким выводом в PHP сделать
такая таблица?
|NAME|VALUE|
| A | 5 |
| B | 7|
если да, то вот запрос:
SELECT * FROM TABLE_NAME ORDER BY VALUE DESC
Подскажите какой параметр или что либо еще нужно поставить чтобы записи в базе формировались по значению,к примеру в поле А значение 5,а в боле B значение 7
Как сделать чтобы B соответственно выводилось впереди?
Если так нельзя,подскажите что можно с таким выводом в PHP сделать
ASC, DESC
подскажите в чём разница:
$userNames = array('MITIBITI', 'tabu','Dariy','Tema');
и
$res= mysql_query ("SELECT login FROM user ",$db);
$userNames= mysql_fetch_array($result);
почему из второго варианта извлекается только одно значение масива? как извлечь в масив все не применяя цикл?
Потому что
mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both
Greenkas
08.11.2009, 00:26
harom, без цикла можно вывести только функцией print_r($userNames)
Patronik
11.11.2009, 01:08
подскажите в чём разница:
$userNames = array('MITIBITI', 'tabu','Dariy','Tema');
и
$res= mysql_query ("SELECT login FROM user ",$db);
$userNames= mysql_fetch_array($result);
почему из второго варианта извлекается только одно значение масива? как извлечь в масив все не применяя цикл?
так как ты написал во втором варианте. mysql_fetch_array сама возвращает масив из результата запроса. $userNames будет масивом
есть столбец COL1 в таблице TABLE1 в котором скажем содержимое 1,2,3,4
и второй столбец COL2 в другой таблице TABLE2 в котором содержимое 1,2,3
мне нужно сднлать чтото типо такого одним запросом:
WHERE 1 IN(1,2,3,4)
WHERE 2 IN(1,2,3,4)
WHERE 3 IN(1,2,3,4)
какбы разделить данные в COL2 по запятой и проверить существует ли он в COL1
krypt3r нет .. ты не понел дело не в том чтоб взять данные с двух таблиц а в том чтоб проверить есть ли хотябы одно совпадение из COL1 в COL2 есть ли в COL2 хотябы одна из этих цифр 1,2,3 а в COL2 данные вида 1,2,3,4,5,6
типо совпадения есть и 1 есть в COL2 и 2 и 3
Объясните, пожалуйста такое. 1, 2 одного и тоже. Какая прицнипиальная разница?
$query = "SELECT password FROM users WHERE name='".$_POST['login']."'";
$login_authentication = mysql_query($query);
if(mysql_num_rows($login_authentication) > 0)
{
// Получаем пароль
$password = mysql_result($login_authentication,0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
echo "Hello, $login";
}
}
$query = "SELECT * FROM users where name='".$login."' and pass = '".$password."';
Второй скрипт уязвим для обхода авторизации по типу
login="' or 1=1 --
Architek86
14.11.2009, 21:12
Народ, есть запрос:
"SELECT `id`,`cena_bannera`,`date_cena` FROM `puppy_users` WHERE `my_porodki` like '%" . $pord . "%' AND `act_bannera` = 1 ORDER BY `cena_bannera` DESC,`date_cena` ASC"
Можно ли изменить запрос так, что бы он при выборе строк смотрел, что за `id`, если оно равно, например, 10, то к результату `cena_bannera` прибавлял бы, например, 5 (прибавлял бы к результату, а не делал UPDATE поля!!!) и, естественно, сортировал бы результат (т.е. ORDER BY `cena_bannera` DESC) с учётом изменённого `cena_bannera`?
P.S. Знаю, есть в MySQL IF(), но каким боком его там заюзать...
"SELECT `id`,if(`id` = 10, `cena_bannera` + 5, `cena_bannera`) as `cb`,
`date_cena`
FROM `puppy_users`
WHERE `my_porodki` like '%" . $pord . "%'
AND `act_bannera` = 1
ORDER BY `cb` DESC,`date_cena` ASC"
$one = mysql_qurey("SELECT * FROM user WHERE id=1 LIMIT 1",$connect);
$name1=mysql_fetch_array($one);
echo $name1[name];
$one = mysql_query("SELECT name FROM user WHERE id=1 LIMIT 1",$connect);
$name2=mysql_fetch_array($one);
echo $name2[name];
по идее второй код занимает меньше памяти? или нет смысла выбирать столбцы только те которые нужны?
Pashkela
17.11.2009, 01:27
думаю есть смысл, и дело скорее не в памяти, а скорости sql-запроса + нагрузка на БД
тем более если в итоге нужно только name выцепить
Всегда стараюсь выцепить только те колонки, которые действительно нужны. Имхо не слишком целесообразно брать все 30 полей из таблицы, если нужно на самом деле одно-два-три
erihtoney
17.11.2009, 10:32
$one = mysql_qurey("SELECT * FROM user WHERE id=1 LIMIT 1",$connect);
$name1=mysql_fetch_array($one);
echo $name1[name];
$one = mysql_query("SELECT name FROM user WHERE id=1 LIMIT 1",$connect);
$name2=mysql_fetch_array($one);
echo $name2[name];
по идее второй код занимает меньше памяти? или нет смысла выбирать столбцы только те которые нужны?
Раз уж задумался о памяти, было бы разумнее использовать mysql_fetch_assoc, не забивая память
Здравствуйте!
В таблице keywords записаны следующий строки:
i want buy moto
i want buy new auto
want i buy motocycle
buy want i new moto
Строка-поиск: i want buy
Возможно ли запросом выбрать все строки, в которых присутствуют слова из исходной строки поиска?
Обычным
SELECT * FROM keywords WHERE string LIKE '%i want buy%'
не обойтись, т.к. вернуться только первые две строки, мне нужно вернуть все. Это возможно? Если возможно то как?
Заранее благодарен!
Попробуйте как-нить так
string RLIKE '(^| )i( |$)'
AND string RLIKE '(^| )want( |$)'
AND string RLIKE '(^| )buy( |$)'
Ещё раз здравствуйте!
В таблице строки:
id string
1 я строчкоо
2 я строчкоо
1 я строчкоо
5 я строчкоо
9 я строчкоо
19 я строчкоо
21 я строчкоо
Нужно получить НОМЕР строки в таблице, т.е. для строки с id = 5 запрос должен вернуть 4
Возможно ли это? Если да, то как будет выглядеть запрос или в какую сторону копать? :confused:
Заранее благодарен! :rolleyes:
таблица, три поля:
- ид (автоинкримент)
- идф (уникальное)
- текст
как заполнять в пхп правильно уникальное поле, разве только генерить число, проверять через цикл есть ли оно в поле "идф", если нет вставлять?что то кажеться как то проще должно быть :)
if(mysql_query("SQL QUERY"))
{
//Тут действие если успешно добавлено уникальное значение
echo "Добавлено";
}else echo "Не добавлено, ключ совпадает";
?>
2LStr1ke, суть в том что ИД должно автоматом без участия пользователя вводиться, можно конечно проверять первую и последнюю запись и делать соответствующие выводы, а проще не бывает? спасибо за совет
Если ИД у тебя автоинкремент, то можешь в запросе его не указывать, оно само увеличится на 1
Если ИД у тебя автоинкремент, то можешь в запросе его не указывать, оно само увеличится на 1
mysql_insert_id()
__________
0ph.ru
SaiRus, вот так:
mysql_query("INSERT INTO `your_table` (`id`, `idf`, `text`) VALUES (NULL,'lalala','lalala')")
Тобишь, в месте, где ID, надо писать HULL.
Architek86
24.11.2009, 16:55
Что означает следующая ошибка:
Warning: mysql_connect(): Lost connection to MySQL server at 'sending authentication information', system error: 32 in /home/admin/domains/***.ru/public_html/arefresh.php on line 3
???
Я так понимаю, это скорее всего проблема хостера?
Architek86
24.11.2009, 17:08
таблица, три поля:
- ид (автоинкримент)
- идф (уникальное)
- текст
как заполнять в пхп правильно уникальное поле, разве только генерить число, проверять через цикл есть ли оно в поле "идф", если нет вставлять?что то кажеться как то проще должно быть :)
Я бы на твоем месте базу немного по иномму бы огранизовал, сделав идф автоинкрементом. Почему? да потому что AUTO_INCREMENT генерирует число, не из соображений "создать новое максимальное число", а из соображений "создать уникальное число"
UNIQUE же используется для того, дабы, не дай бог, злобный юзверь не внёс в базу то, что уже есть, иначе получишь предупреждение, или же возможность UPDATE старый UNIQUE с помозью команды ON DUPLICATE KEY UPDATE ))). Просто не путайте понятия, и тогда решение задачи станет легче :)
есть таблица со столбцами id и status
1 room
2 flat
3 room
4 house
5 room
6 house
как сделать чтоб вывдоилось колличество вхождений от большего к меньшему по стоблцу status, из этой таблици выводится должно
3 room
2 house
1 flat
SELECT COUNT(*), `status` FROM `mytable` GROUP BY `status` ORDER BY 1 DESC;
есть табличка logins
Надо вывести логины начинающиеся на букву напимер A
Используя толкьо SQL запрос (MySQL)
SELECT * FROM logins WHERE name=????
SELECT * FROM logins WHERE name LIKE 'a%'
SELECT * FROM logins WHERE left(name,1)='A'
Pashkela
25.11.2009, 21:50
SELECT * FROM `logins` where SUBSTRING(`username`,1,1) = 'A'
правда тоже регистропох....как и LEFT, гы
Большой джо
26.11.2009, 20:34
Как в MySql Вывести данные, отсортированные по Primary ключу?
Pashkela
26.11.2009, 20:41
$query = "select * from `[table]`order by `[ключ]` DESC - по убыванию
$query = "select * from `[table]`order by `[ключ]` ASC - по возрастанию
PS: [] потом удалить конечно
Большой джо
26.11.2009, 20:42
$query = "select * from `[table]`order by `[ключ]` DESC - по убыванию
$query = "select * from `[table]`order by `[ключ]` ASC - по возрастанию
PS: [] потом удалить конечно
Благодарю)
UPDATE pr_admins SET value='MyTheme' WHERE setting='theme'
Что не так? :mad:
Пишет:Unknown column 'setting' in 'where clause'
Колонки:
setting
value
попробуй `value` и `setting`
попробуй `value` и `setting`
Пробывал, все так же
а если и имя таблицы в `` заключить?
а если и имя таблицы в `` заключить?
Все так же
хз.. я у себя такую же таблицу создал, поробовал, все пашет и в первоначальном варианте...
kickboxer
27.11.2009, 06:17
вообщем, у меня есть база данных, упакованная в *.gz
проблема в том, что архив не докачен на 10 мегабайт, возможно ли и как восстановить БД или хотябы отдельные элементы оттуда, такие как имя пользователей, хэш паролей=)
вот ссылка на недокаченный файл:
http://depositfiles.com/ru/files/8ereiatat
или
http://letitshare.ru/265bxwzl0ru8.html
dinar_007
27.11.2009, 18:38
вообщем, у меня есть база данных, упакованная в *.gz
проблема в том, что архив не докачен на 10 мегабайт, возможно ли и как восстановить БД или хотябы отдельные элементы оттуда, такие как имя пользователей, хэш паролей=)
вот ссылка на недокаченный файл:
Попробуй разобраться в архиве... Измени все CRC, перепотраши все смещения файлов и сформируй новый архив :) А вообще, винрар вроде может делать это, там аптечка есть...
kickboxer
28.11.2009, 19:11
Попробуй разобраться в архиве... Измени все CRC, перепотраши все смещения файлов и сформируй новый архив :) А вообще, винрар вроде может делать это, там аптечка есть...
а это как?:)
а то я в этих вопросах ни бум-бум...
так винрар вообще не хочет открывать этот файл, не могу там ничего сделать
как привильно создать запрос в 2 таблицы
1 таблица Accounts с полями id и login
2 таблица Types с полями loginid и type
поля liginid и id так скажем идентичны
Нужно правильно написать запрос типа
SELECT * FROM Accounts,Types WHERE...
Нужно правильно написать WHERE если из скрипта нам приходит $id Допустим 1
дайте, плиз, ссылку на описание русс. по phpMyAdmin, создание табл, описание каждого значения, атрибуты, сравнения и т.д., заранее, спасибо.
Знаменитым методом "тыка", не особо хочется)
Причем тут phpMyAdmin, ето всего лиш графическая оболочка, интерфейс для взаимодействия с MySQL, из этого вытекает что учить нужно сам язык http://www.mysql.ru/docs/
Помогите, вот в майпхпадмин выставлено число, при выводе, выводит в таком виде 234.23, а нужно целое число, как это сделать?
http://i026.radikal.ru/0912/76/0d0f42453eb0.jpg
intval()
а точнее? где это сделать?
Когда выводишь результат запроса к БД.
intval($out);
Pashkela
08.12.2009, 19:01
Сейчас выяснится, что задаватель вопроса кодирует на Python, вот увидите. Вообще сама постановка вопроса "Помогите, вот в майпхпадмин выставлено число, при выводе, выводит в таком виде 234.23, а нужно целое число, как это сделать?" отбивает всякое желание отвечать - выводе, где? В вашем воспаленном мозге?
PS: Верните баллы, пусть лучше скули постят, читать на ачаде нечего стало вообще
extreemal
08.12.2009, 19:05
print (int)$float;
Сейчас выяснится, что задаватель вопроса кодирует на Python, вот увидите. Вообще сама постановка вопроса "Помогите, вот в майпхпадмин выставлено число, при выводе, выводит в таком виде 234.23, а нужно целое число, как это сделать?" отбивает всякое желание отвечать - выводе, где? В вашем воспаленном мозге?
PS: Верните баллы, пусть лучше скули постят, читать на ачаде нечего стало вообще
ппц, тема для чего? Для нубов! Вот я и залез сюда, т.к. не шарю в этом.
На выводе, на самом сайте, выводит не целое число.
На выводе, на самом сайте, выводит не целое число.
Да уж пашкела прав =\
На чем сайт сделан?
забейте. В этой теме лучше засрут, чем советом помогут.
Помогите, вот в майпхпадмин выставлено число, при выводе, выводит в таком виде 234.23, а нужно целое число, как это сделать?
http://i026.radikal.ru/0912/76/0d0f42453eb0.jpg
2Все: Тема называется "Вопросы по БД"... Логично что человек хотел услышать как это сделать на стороне БД?
2Tombik:
Язык SQL имеет функцию CAST, предназначенную для явной конвертации между типами.
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
Элементарный пример использования:
SELECT CAST(field AS decimal) FROM table
Где field - твое поле с числом, table - таблица.
как привильно создать запрос в 2 таблицы
1 таблица Accounts с полями id и login
2 таблица Types с полями loginid и type
поля liginid и id так скажем идентичны
Нужно правильно написать запрос типа
Нужно правильно написать WHERE если из скрипта нам приходит $id Допустим 1
Декартово произведение, как ты предложил, здесь будет более затратным ИМХО. С ним так:
SELECT * FROM Accounts AS ac,Types AS tp
WHERE ac.id = tp.loginid
Боле уместно, на мой взгляд, будет эти таблички сджойнить
SELECT * FROM Accounts AS ac
JOIN Types AS tp ON ac.id = tp.loginid
spamoney
10.12.2009, 06:33
Здравствуйте, помогите разобраться почему возникает ошибка:
WARNING: mysql_data_seek() [<a href='function.mysql-data-seek'>function.mysql-data-seek</a>]: Offset 10 is invalid for MySQL result index 29 (or the query data is unbuffered)
Запрос:
$result = mysql_query ("SELECT * FROM table");
if (!mysql_data_seek ($result , 0)) echo "Cannot seek to row";
Patronik
10.12.2009, 21:42
забейте. В этой теме лучше засрут, чем советом помогут.
если результат запроса есть число, то функция intval(); приведет его к целочисленному типу.
Например
$result1 = 3.14;
echo ' '.$result1.' нецелочисленный результат <br> ';
$result2 = intval($result1);
echo ' '.$result2.' целочисленный результат';
HI ALL!!!
Такая проблема:
У юзера в БД MYSQL (5.1) имеются права на все таблицы и базы данных.
Вопрос:
Как с помощью операторов языка ограничить доступ юзера к таблицам mysql, information_schema?
Заранее всем спасибо!
Так
REVOKE ALL PRIVILEGES ON `dle` . * FROM 'test'@'%';
GRANT USAGE ON `dle` . * TO 'test'@'%';
ANTIHАCK
13.12.2009, 23:44
есть запрос: SELECT * FROM `user` WHERE `ip` = 10.2.197.11
естественно он не выполняется из за точек в IP ... как сделать что бы он с точками работал?..
ANTIHАCK
13.12.2009, 23:54
Вроде это называется "экранировать точки")) Гугл не помогает... есть ли способы?
естественно он не выполняется из за точек в IP ... как сделать что бы он с точками работал?..
может быть в кавычки взять? )
вообще правильнее использовать inet_ntoa()
ANTIHАCK
14.12.2009, 00:11
Черт забыл про кавычки) я тормоз.
Где в настройках мускула разрешить доступ к базе с других компов ? ось unix если имеет значение
Поле `host` в таблице `mysql`.`user` + FLUSH PRIVILEGES;
так
GRANT ALL PRIVILEGES ON *.* TO USERNAME@IP IDENTIFIED BY "PASSWORD";
или
grant select,insert,update, delete ON *.* TO USERNAME@IP IDENTIFIED BY "PASSWORD";
обновить привелегии:
FLUSH PRIVILEGES;
Спасибочки...
а как создать пользовате GRANT ALL PRIVILEGES ON *.* TO USERNAME@IP IDENTIFIED BY "PASSWORD"; пользователя через SSH клиент ?
Solide Snake
15.12.2009, 18:47
mysql> GRANT ALL PRIVILEGES on *.* to <user@host> IDENTIFIED by <password> WITH GRANT OPTION;
Или я туплю по пьяни...((
mysql> GRANT ALL PRIVILEGES on *.* to <user@host> IDENTIFIED by <password> WITH GRANT OPTION;
Или я туплю по пьяни...((
Через SSH клиент , сервер на линюксе , со всоего компа подключился через SSH , установил мускул , во время установки создал рут пользователя, но со своего компа не получается подключится к базе , может потому что пользователь root@localhost , а нужен root@myip
Хотя может быть 3306 порт закрыт, тогда подскажите в каком файле и где его открывать ?
пользователя через SSH клиент ?
Причем тут SSH )) Через консоль MySQL, вводиш в терминале:
mysql -u root -p [enter]
Далее вводиш пароль, залогинились и там:
GRANT ALL PRIVILEGES ON *.* TO USERNAME@IP IDENTIFIED BY "PASSWORD";
а может юыть 3306 порт закрыть для удаленного подключения ?
созданое уже поле id, как ему присвоить auto_increment ?
есть таблица register, в ней 6 полей, id,usr,pass,email,regIP,dt(datatime)
какие поля нужно добавить, что бы в последующем: вёлся учёт рефералов, вёлся учёт отправленных смс рефералами, вёлся учёт тех кто не по реф ссылке регистрировался? заранее всем спс. а то я уже не могу сам додумать.
есть таблица register, в ней 6 полей, id,usr,pass,email,regIP,dt(datatime)
какие поля нужно добавить, что бы в последующем: вёлся учёт рефералов, вёлся учёт отправленных смс рефералами, вёлся учёт тех кто не по реф ссылке регистрировался? заранее всем спс. а то я уже не могу сам додумать.
я бы для учета реф смс создал отдельную таблицу, а что бы :
вёлся учёт тех кто не по реф ссылке регистрировался
просто добавь поре ref и туда заноси ко какому реф id зарегистрировался, или оставляй пустым если не по реф ссылке зарегистрировался
sergeyich
18.12.2009, 01:01
Есть несколько баз данных на dle, скажите как их соединить в одну базу, или добавить к уже существующей базе базу
Доброе утро!
Подскажите пожалуйста, как выбрать из таблички количество тех записей, которых в ней больше всего, сравнивая по полю id_channel ? :confused: :confused: :confused:
id ip id_channel time
Навскидку
SELECT COUNT(*) FROM `sometable`
WHERE `id_channel` =
(SELECT `id_channel` FROM `sometable` ORDER BY `id_channel` DESC LIMIT 1)
либо
SELECT COUNT(*) FROM `sometable`
GROUP BY `id_channel`
ORDER BY `id_channel` DESC LIMIT 1;
Есть табличка:
id ip id_channel time
1 70.88.31.247 613 1261099440
2 95.70.82.140 1016 1261099633
3 95.01.82.140 1016 1261099645
4 67.190.111.224 1388 1261099674
5 77.88.31.247 1315 1261099850
6 67.190.111.224 1502 1261099937
7 77.88.31.247 1715 1261099951
8 95.135.36.200 561 1261099988
9 77.88.30.247 1099 1261099995
10 90.71.02.140 1016 1261100724
11 95.71.82.140 1016 1261100731
Нужно выбрать из нее тот id_channel, который больше всего повторяется.
В нашем случае это 1016
Далее уже посчитать сколько раз повторяется.
krypt3r, Спасибо, но не работает :(
Я не так задание понял. Попробуйте так
SELECT COUNT(*) FROM `sometable`
GROUP BY `id_channel` ORDER BY 1 DESC LIMIT 1;
Я не так задание понял. Попробуйте так
SELECT COUNT(*) FROM `sometable`
GROUP BY `id_channel` ORDER BY 1 DESC LIMIT 1;
Попробывал, но тоже не работает :(
$result = mysql_query("SELECT COUNT(*) FROM `table` GROUP BY `id_channel` ORDER BY 1 DESC LIMIT 1");
$row = mysql_fetch_array($result);
echo $row["id_channel"];
echo mysql_num_rows($result);
$result = mysql_query("SELECT COUNT(*) AS `c` FROM `table` GROUP BY `id_channel` ORDER BY 1 DESC LIMIT 1");
$row = mysql_fetch_array($result);
echo $row['c'];
echo mysql_num_rows($result);
У меня все работает, обработайте возможные ошибки.
<?php
mysql_connect ('localhost', 'user', 'pass')
or die ("Connection failed\n");
if (mysql_select_db ('mybase')) {
$result = mysql_query ("SELECT COUNT(*) AS `c` FROM `sometable` GROUP BY `id_channel` ORDER BY 1 DESC LIMIT 1");
if ($result) {
$row = mysql_fetch_array ($result);
echo $row['c'], "\n";
echo mysql_num_rows ($result), "\n";
} else
echo "Query failed: " . mysql_error (), "\n";
} else
echo "Cannot select database\n";
mysql_close ();
?>
Выводит
4
1
krypt3r, большое спасибо!
Вот так заработало всё:
$result = mysql_query("select count(id_channel), `id_channel` from `table` group by `id_channel` order by 1 desc limit 1");
sergeyich
18.12.2009, 14:04
А по моему вопросу никто не подскажет? Как соеденить несколько баз dle в одну?
Подскажите, как добавить запись к уже существующей?
Pashkela
20.12.2009, 22:10
update, а вообще вопрос непонятен
Pashkela есть в таблице поле channels равно оно "2,5,6,8,9"
Нужно к нему добавлять данные ",3,5,6,7,8"
Причем если есть такое число, то не записывать его :confused:
Pashkela
20.12.2009, 22:25
update `имя_таблицы` set channels = concat(channels, ",3,5,6,7,8") where .....
если есть такое же число то одним запросом вряд ли
почему
include("connect.php");
mysql_query("INSERT INTO `user` (`email`,`pass`) values ('email','pass')",$connection);
делает запись, а вот
include("connect.php");
function a() {
mysql_query("INSERT INTO `user` (`email`,`pass`) values ('email','pass')",$connection);
}
a;
а вот такое не делает запись в базу?
=================================
разобрался, надо так
include("connect.php");
function a($connection) {
mysql_query("INSERT INTO `user` (`email`,`pass`) values ('email','pass')",$connection);
}
a($connection);
function a() {
global $connection;
mysql_query("INSERT INTO `user` (`email`,`pass`) values ('email','pass')",$connection);
}
DarkMist
21.12.2009, 17:41
Решил изучить T-sql . С MySQL будет работать ???
Transact-SQL от MS? Частично. Функции в SELECT и WHERE разные
Помогите с запросом, нужно из базы выбрать 20 строчек с наибольшим рейтингом и отсортировать по стане:
Побывал так:$result = mysql_query("SELECT * FROM `base` WHERE `show`='1' ORDER BY `rating` DESC, `country` ASC LIMIT 0, 20");не получилось :(
Pashkela
22.12.2009, 10:32
запрос правильный, только что у себя проверил, должен работать. В чем ошибка проявляется?
Pashkela, запрос правильный, но он сортирует по большему рейтингу, 20 позиций, а потом полученное подсортировывает по стране.
То есть если есть 2 позиции
p1 с рейтингом 30 страна Англия
p2 срейтингом 40 страна Белорусь
этот запрос отсортирует так:
p2
p1
так как рейт больше. Но у p2 страна на букву "Б" и следовательно если я сортирую полученное по стране, то на букву "А" должно идти первым.
Нужно отобрать из базы 20 позиций с наибольшим рейтингом и отсортировать по стране сторого.
Я так понял нужно 2 запроса делать?
Спасибо!
Pashkela
22.12.2009, 13:36
так как рейт больше. Но у p2 страна на букву "Б" и следовательно если я сортирую полученное по стране, то на букву "А" должно идти первым.
тогда вопрос неправильно стоит, просто поменяй местами ORDER BY `rating` DESC, `country` ASC тут, т.е. первым должно идти `country` ASC, если тебе алфавит страны важнее
PS: Если опять не то, то да, два запроса тогда наверное, одновременно и рейтинг наибольший и сортировка так, как тебе надо - вряд ли
Gray_Wolf
22.12.2009, 14:04
Узнаёш 1-м запросом рейт 20-го и потом выводиш по алфавиту всех у кого рейт >= полученного...
Узнаёш 1-м запросом рейт 20-го и потом выводиш по алфавиту всех у кого рейт >= полученного...Пробывал вот так извратиться них не вышло :(
$result = mysql_query("SELECT * FROM (mysql_query("SELECT * FROM `base_` WHERE `show`='1' ORDER BY `rating` DESC LIMIT 0, 20")) WHERE `show`='1' ORDER BY `country` ASC"); :confused:
Помогите :(
Pashkela
22.12.2009, 19:41
короче уже голову сломал, чо те надо:) Попробуй так:
select * from (select * from `base_` where `show`='1' ORDER BY `rating` DESC LIMIT 0, 20) as a ORDER BY `country` ASC
PS: Ибо второй раз писать where и limit смысла конечно нет
короче уже голову сломал, чо те надо:) Попробуй так:
select * from (select * from `base_` where `show`='1' ORDER BY `rating` DESC LIMIT 0, 20) as a ORDER BY `country` ASC
PS: Ибо второй раз писать where и limit смысла конечно нет
Спс, почти оно :) Но вот СКРИН (http://s54.radikal.ru/i143/0912/9f/2d969fdcc38e.png), как то Страну коряво сортирнуло :confused:
Pashkela
22.12.2009, 20:35
покажи запрос на пыхе, плз
if($so==3){$result = mysql_query("select * from (select * from `base_` where `show`='1' ORDER BY `rating` DESC LIMIT 0, 20) as a ORDER BY `country` ASC");} :)
UP! Помогите плиз, ничего не выходит.
Помогите с запросом, нужно из базы выбрать 20 строчек с наибольшим рейтингом и полученное отсортировать по стане:
Побывал так:$result = mysql_query("SELECT * FROM `base` WHERE `show`='1' ORDER BY `rating` DESC, `country` ASC LIMIT 0, 20");не получилось :(
:confused:
mff, приведите пример, что вы хотите получить
krypt3r, есть табличка:
id channel country rating views
Нужно выбрать 20 позиций с наибольшим рейтингом (rating) и полученное отсортировать по алфавиту по стране (country) :confused:
Это не полный пример. Приведите несколько записей из этой таблицы и результат, который вы хотите получить.
krypt3r полез делать дамп и понял в чем дело! Спасибо! У меня страны в виде чисел хранились, а сами названия в другой табличке -)
Freakazoitt
25.12.2009, 18:13
как удалить в таблице ранние записи (время в хранится в ячейке t), оставив 30 последних?
Ага теперь вот такой вопрос:
есть табличка:
CREATE TABLE `base` (
`id` int(10) unsigned NOT NULL auto_increment,
`channel` char(255) NOT NULL,
`country` char(255) NOT NULL,
`rating` int(10) NOT NULL,
`views` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(1, 'Детский мир', '1', '0', '154' '1'),
(1, 'Детский мир2', '3', '0', '154' '6'),
(1, 'Детский мир3', '1', '0', '154' '12'),
(1, 'Детский мир4', '2', '0', '154' '77'),
(1, 'Детский мир5', '2', '0', '154' '1');
и
CREATE TABLE `country` (
`id` int(10) unsigned NOT NULL auto_increment,
`title_rus` char(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(1, 'Албания'),
(2, 'Эстония'),
(3, 'Япония');
Задача та же, из базы base выбрать 20 строчек с наибольшим рейтингом(rating) и полученное отсортировать по стане(title_rus) :confused:
Помогите плиз :(
Есть таблица blabla с полями id,title
Id | title
1 Первая
2 Вторая
3 Третья
4 Четвертая
5 Пятая
запрос: select * from blabla Покажет их все.
Мне же нужно вывести их все начиная с определенного id, чтобы нужный id выводился первым.
Чтото вроде на выходе должно получится.
(id = 4)
4 - Четвертая
1 - Первая
2 - Вторая
3 - Третья
5 - Пятая
Короче ладно. 1 запросом не придумать чета.
Сделал так:
1 запросом вывожу по текущему id, воторым вывожу все что не равно этому id
Neoveneficus
26.12.2009, 21:02
Есть таблица blabla с полями id,title
запрос: select * from blabla Покажет их все.
Мне же нужно вывести их все начиная с определенного id, чтобы нужный id выводился первым.
Чтото вроде на выходе должно получится.
(id = 4)
4 - Четвертая
1 - Первая
2 - Вторая
3 - Третья
5 - Пятая
SELECT * FROM `table` WHERE id = '4' union SELECT * FROM `table` WHERE id != '4'
$del= mysql_query("DELETE FROM `ban` WHERE `cnt` > `maxcount`") or die("Invalid query: " . mysql_error()) ;
`cnt` and `maxcount`имена столбцов в базе которые содержат значения
дело в том что он удаляет как то совершенно рандомно и понятно только ему как он удаляет записи, причем условию они могут как соответствовать так и не соответствовать
или же
SELECT id FROM bann WHERE `cnt` >= `maxcount`
тоже возвращает рандомные айдишники =\
А какие значения у cnt и maxcount
интовые
http://img707.imageshack.us/img707/6206/97211870.jpg
Architek86
27.12.2009, 21:42
Даны две таблицы: tbl1 и tbl2.
tbl1: содержит id, name
tbl2: содержит id (которое связано с id предыдущей таблицы), work
Как выполнить select всех записей, что бы каждая возвращённая строка содержала id, name, work и причём без нарушения связи, т.е. work соответствовал id. Пробовал в where ставить условие tbl1.id = tbl2.id, но по-моему, что то не так.. И + надо отсортировать ответ по name, к примеру.
привет! наверняка многие играли в покер вконтакте, там каждый день дается по рандомной сумме голосов. я хочу для своей игры сделать тоже самое, т.е. создать bool колонку "получен ли дневной бонус". в 12 часов ночи он ставится на false, а как только игрок получает его, становится true. так вот вопрос: можно это сделать как-то настройками mysql, или каждый день надо запускать пхп-скрипт, который все бы отмечал на false?
Architek86
SELECT t1.id, t1.name, t2.work
FROM tbl1 t1
LEFT JOIN tbl2 t2 USING (id)
ORDER BY t1.name
Помогите пожалуйста, есть таблица вида date|name
Колонка date содержит даты вида "2009-08-11 17:59:47",
Как построить запрос, чтобы выводить результаты допустим за последние 6 часов.
Ответ нашёл сам. WHERE UNIX_TIMESTAMP(date) > НУЖНОЕ ВРЕМЯ в UNIX ФОРМАТЕ
Есть такой вопрос, имееться логин и пароль к бд, известен хост (ип-адрес), в бд я создаю пользователя (админа) со всеми правами:
GRANT ALL PRIVILEGES ON *.* TO USER@"%" IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
Пробую подключиться при помощи Navicat с другого компьютера, не работает. В чем может быть дело?
SELECT NAME_CONST((select password from users where id=1),1) FROM article WHERE id=1
Возвращает Incorrect arguments to NAME_CONST.
Если судить по статье квазара,то должен бы возвратить другую ошибку.
В чем загвоздка? Я так никогда и не освою этот метод sql-inj?( :(
CREATE TABLE `ocenki` (
`num` INT NOT NULL AUTO_INCREMENT ,
`art` INT NOT NULL ,
`user` VARCHAR NOT NULL ,
`oc` SMALLINT NOT NULL ,
PRIMARY KEY ( `num` ) ,
INDEX ( `art` )
)
Ответ MySQL:
#1064 - 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 'NOT NULL, `oc` SMALLINT NOT NULL, PRIMARY KEY (`num`), INDEX (`art`))' at line 1
Что не так?
Pashkela
04.01.2010, 20:00
в этой строке:
`user` VARCHAR NOT NULL ,
нужно указать длину поля, т.е. например так:
`user` VARCHAR(20) NOT NULL ,
т.к. int и smallint имеют дефолтную длину, если такова не указана вручную, в отличие от VARCHAR
Nightmarе
05.01.2010, 12:48
Установил на сайт воблу, но забыл указать перфикс таблиц. Собственно, вручную их переименовывать реально жудко.
Может быть есть какой запрос на SQL, который ко всем таблицам припишет нужный мне перфикс???
Pashkela
05.01.2010, 16:51
Полно вариантов, особено в никсах, но мне по душе скриптом такие вещи делать - без предварительного дампа, без зависимости от системы и бла-бла-бла
<pre>
<?php
$dbname = 'instant'; # Имя БД
$prefix = 'vobla_'; # Желаемый префикс
$link = mysql_connect("localhost", "root", "root"); # Хост, юзер, пароль
$query = "SHOW TABLES FROM " . $dbname;
mysql_select_db($dbname);
$result = mysql_query($query,$link);
while ($table = mysql_fetch_array($result)) {
$new = mysql_query ("ALTER TABLE `" . $table[0]. "` RENAME `" . $prefix . $table['0'] . "`", $link);
print $table[0] . " ---> " . $prefix . $table['0'] . "\n";
}
mysql_close($link);
print "Замена произведена \n";
?>
</pre>
Скуль запросом чтобы такое сделать (одним) - хз
Pashkela
05.01.2010, 19:28
Или еще один способ, чисто через phpmyadmin, аналогов не видел:
1. phpmyadmin->выбираем БД->SQL
2. Выполняем такой запрос:
SELECT CONCAT(CONCAT('ALTER TABLE ', table_name),CONCAT(' RENAME ', CONCAT('pref_', table_name, ';'))) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='instant' LIMIT 0 , 100;
где "pref_" - нужный префикс, в LIMIT указываем кол-во таблиц для изменения, "instant" - имя БД, в которой мы хотим добавить префикс к таблицам. В результате получим текст sql-запроса, который останется только скопировать и выполнить:
http://i071.radikal.ru/1001/3e/1bd506f6a1a9t.jpg (http://radikal.ru/F/i071.radikal.ru/1001/3e/1bd506f6a1a9.jpg.html)
т.е. полученный текст копируем, опять лезем в SQL, вставляем, выполняем, всё.
PS: Можно вывести в файл и потом копировать оттуда
какой самый быстрый способ выбора последних n строк с таблице , в том же порядке в котором идут, длю удобства есть id (auto inc)
Pashkela
05.01.2010, 20:48
select * from table order by id DESC limit n,m
select * from table order by id DESC limit n,m
не так я уже делал, только один витаскивал, n-ий с конца
select * from table order by data limit $количество_записей-N ,$количество_записей
только вот такой вариант заработал как надо, но тут заранее еще надо и количество всех записей узнавать, хоте бы что бы без этого было
SELECT * FROM
(SELECT *
FROM table
ORDER BY id DESC LIMIT 10) as x
ORDER BY id ASC
Имеем таблицу,в ней допустим:
id name vis num
+--------+---------+---------+---------+
| 1 hello 1 4 |
| 2 blabla 1 2 |
| 3 sexy 0 1 |
| 4 pew 1 9 |
+---------+---------+---------+--------+
$query = mysql_query("SELECT * FROM block WHERE vis = 1");
Так вот,хотелось бы получить результаты отсортированные по num, тоесть по возрастанию,от 1 к 9.Спасибо.
Имеем таблицу,в ней допустим:
id name vis num
+--------+---------+---------+---------+
| 1 hello 1 4 |
| 2 blabla 1 2 |
| 3 sexy 0 1 |
| 4 pew 1 9 |
+---------+---------+---------+--------+
$query = mysql_query("SELECT * FROM block WHERE vis = 1");
Так вот,хотелось бы получить результаты отсортированные по num, тоесть по возрастанию,от 1 к 9.Спасибо.
)) DESC,ASC :)
SELECT * FROM
(SELECT *
FROM table
ORDER BY id DESC LIMIT 10) as x
ORDER BY id ASC
да, вот этот вариант мне подходит, спасибо
Имеем таблицу,в ней допустим:
id name vis num
+--------+---------+---------+---------+
| 1 hello 1 4 |
| 2 blabla 1 2 |
| 3 sexy 0 1 |
| 4 pew 1 9 |
+---------+---------+---------+--------+
$query = mysql_query("SELECT * FROM block WHERE vis = 1");
Так вот,хотелось бы получить результаты отсортированные по num, тоесть по возрастанию,от 1 к 9.Спасибо.
$query = mysql_query("SELECT * FROM block WHERE vis = 1 order by num");
Открываю таблицу MySQL через Navicat сортировка верная
А когда делаю запрос типа
SELECT * FROM items WHERE name='Капуста'
Сортировка выводится снизу вверх
Пробовал ORDER BY id не помогает (id одинаковы)
Pashkela
06.01.2010, 18:42
2 Byrger:
Отличный вопрос, осталось выяснить только, сортировка по какому полю требуется.
PS: Ппц, понимаю, праздники
2 Byrger:
Отличный вопрос, осталось выяснить только, сортировка по какому полю требуется.
PS: Ппц, понимаю, праздники
В том то и дело что там нет видимой сортировки.
Если открыть через Navicat то как нужно выводит
А вот когда напрямую делаю то не гуд
Pashkela
06.01.2010, 18:57
то как нужно выводит
соберись с мыслями
Есть таблица с итемами из игры
Есть колонка grade которая может принимать значения s84,s80,s,a,b,c,d,none
Как прописать запрос чтоб таблица сортировалась по grade именно в том порядке который я написал?
Есть таблица с первой колонкой ID, как можно узнать самый большой id в данный момент ? т.е. например есть 3 записи в таблице со значениями ID 1,2,3 нужно чтоб выдал самый большой и вывел его.
Есть таблица с первой колонкой ID, как можно узнать самый большой id в данный момент ? т.е. например есть 3 записи в таблице со значениями ID 1,2,3 нужно чтоб выдал самый большой и вывел его.
SELECT * FROM table WHERE id=(SELECT max(id) FROM table)
warlok select max(id) from table;
Нуко подскажите мне, как строки клеить
SELECT 'pewpew'+'123'
выводит "123" он складывает =\ а как клеить?
Pashkela
08.01.2010, 19:57
concat('pewpew','123')
PS: С новым годом, булк )
да нет... я скулю кручу
SELECT 'pewpew'sql_inj
приходится +ord(substring((SELECT table_name FROM information_schema.tables LIMIT 17,1),1,1))
Мнеб побыстрее какнить :)
Pashkela
08.01.2010, 20:06
не, без ссылки я пас, телепортиратор после НГ сломался
Я уже понел, что там 1 табла и делать там нечего :o
pastebin.ru
пиши
<?php
?>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaa'+ord(substring((SELE CT table_name FROM information_schema.tables LIMIT 17,1),1,1)),1);#
из строки aaa... удали пробел
и из "SELE CT"
ReduKToR
09.01.2010, 09:19
Вообщем,есть такой вопросик...Сейчас дописываю форум к своему блог проекту,и возникла такая проблема....Как же выводить данные об авторе поста\темы.
Как бы при написании темы\сообщения в табличку записывается только ник автора.
а нужно выводить еще данные о дате регистрации и т.д
Причем содержится все это в разных таблицах
ReduKToR SELECT * FROM table1 INNER JOIN table2 WHERE table1.nick=table2.nick
ReduKToR SELECT * FROM table1 INNER JOIN table2 WHERE table1.nick=table2.nick
Подскажи как переделать такой mysql запрос, чтобы он возвращал не 1, а данные
SELECT `namesite` FROM `users` WHERE `name` LIKE '$domen' LIMIT 0 , 30
Byrger Сортировка для БД линейки. crystal_type - соответствующее поле. Но лучше так не делать часто, а использовать например UNION
select * from armor order by field(crystal_type, 'none','d', 'c', 'b', 'a', 's', 's80', 's84');
vladan Мало данных для ответа. Возможно вы хотели: Select * from `users` и т.д.
vladan Мало данных для ответа. Возможно вы хотели: Select * from `users` и т.д.
База выглядит так (http://s19.radikal.ru/i192/1001/67/78bd5988d989.jpg) . Нужно если $domen найден в графе name показать namesite этой строки.
vladan А что, собственно не работает? Покажите код, в который вы вставляете запрос и как выводите результат
vladan А что, собственно не работает? Покажите код, в который вы вставляете запрос и как выводите результат
Работаю через perl. Модуль DBI.
my $namesite = $dbh->do("SELECT `namesite` FROM `users` WHERE `name` LIKE '$domen' LIMIT 0 , 30");
print "$namesite";
Получаю 1
Byrger Сортировка для БД линейки. crystal_type - соответствующее поле. Но лучше так не делать часто, а использовать например UNION
select * from armor order by field(crystal_type, 'none','d', 'c', 'b', 'a', 's', 's80', 's84');
vladan Мало данных для ответа. Возможно вы хотели: Select * from `users` и т.д.
SQL-Error: Column 'crystal_type' in order clause is ambiguous
Большой джо
10.01.2010, 19:17
Создаю запрос SELECT * FROM `top` ORDER BY `host` DESC Запрос должен выводить отсортированную таблицу, а выводит полный произвол! в чём ошибка?
phpdreamer
10.01.2010, 19:48
какой тип данных?
Большой джо
10.01.2010, 19:48
Числа, int
Числа, int
это в поле host у тебя числа ? :confused:
и свой вопрос, как через GET передать ссылку? что то просто так не передает :mad: ссылки ютуба , хотя это не имеет значение
Большой джо
11.01.2010, 00:13
это в поле host у тебя числа ? :confused:
Да, я же ответил)
Да, я же ответил)
тогда они у тебя в обратном порядки идти , убери DESC
Большой джо
11.01.2010, 18:49
тогда они у тебя в обратном порядки идти , убери DESC
Неа, всё равно) Проблему решил немного иначе!
$sql = 'INSERT INTO `users` (`id`, `login`, `pass`, `date`, `enter`, `comm`, `balls`, `rating`, `status`, `name`, `sname`, `bday`, `cou`, `city`, `mail`, `icq`, `about`, `ban`, `mystatus`, `ava`) VALUES ("", "'.$_POST['login'].'", "'.$md5.'", NOW(), NOW(), "0", "0", "0", "u", "'.$_POST['name'].'", "'.$_POST['sname'].'", "'.$_POST['date'].'", "'.$_POST['cou'].'", "'.$_POST['city'].'", "'.$_POST['mail'].'", "'.$_POST['icq'].'", "'.$_POST['about'].'", "0", "", "")';
$r=mysql_query($sql,$conn) or die ("err");
Почему выбивает err?
$sql = 'INSERT INTO `mails` (`id`, `login`, `mail`) VALUES ("", "'.$_POST['login'].'", "'.$_POST['mail'].'")';
$r=mysql_query($sql,$conn) or die ("err2");
А здесь не выбевает? Кода одинаковые, кроме того, что в первом больше параметров.
Как насчет текста ошибки?
mysql_query (...) or die (mysql_error ());
все свою проблему решил :)
$sql = 'INSERT INTO `users` (`id`, `login`, `pass`, `date`, `enter`, `comm`, `balls`, `rating`, `status`, `name`, `sname`, `bday`, `cou`, `city`, `mail`, `icq`, `about`, `ban`, `mystatus`, `ava`) VALUES ("", "'.$_POST['login'].'", "'.$md5.'", NOW(), NOW(), "0", "0", "0", "u", "'.$_POST['name'].'", "'.$_POST['sname'].'", "'.$_POST['date'].'", "'.$_POST['cou'].'", "'.$_POST['city'].'", "'.$_POST['mail'].'", "'.$_POST['icq'].'", "'.$_POST['about'].'", "0", "", "")';
$r=mysql_query($sql,$conn) or die ("err");
Почему выбивает err?
$sql = 'INSERT INTO `mails` (`id`, `login`, `mail`) VALUES ("", "'.$_POST['login'].'", "'.$_POST['mail'].'")';
$r=mysql_query($sql,$conn) or die ("err2");
А здесь не выбевает? Кода одинаковые, кроме того, что в первом больше параметров.
с кавычками наверно проблема, попробуй " заменить на ' и наоборот. имею в виду писать
$sql = " и тут уже запрос и где ты раньше хотел кавычки ставить ставь ' ";
есть база
id,name
1 aa
2 bb
3 cc
4 dd
5 ee
как сделать в одном запросе выборку 3 строк с нужными id, например 1,2,5 ?
Pashkela
14.01.2010, 09:31
SELECT * FROM `имя_базы` WHERE id = 1 or id = 2 or id = 5
... WHERE `id` IN (1, 2, 3);
;)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot