PDA

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


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

FraiDex
26.02.2008, 00:48
Предлогаю в этой теме задавать вопросы связаные с MySQL, MSSQL, PostgreSQL, Oracle и т.д.

-=lebed=-
26.02.2008, 01:17
какая самая быстродействующая СУБД из представленных в первом посте?

Spyder
26.02.2008, 01:36
postgre

Scipio
26.02.2008, 01:42
судя по TCP-C Oracle

ShAnKaR
26.02.2008, 01:55
какая самая быстродействующая СУБД из представленных в первом посте?

Informix — СУБД класса Enterprise (корпоративная), подходящая для управления данными в среднем и крупном бизнесе.
Отличается высокой надёжностью и быстродействием, встроенными средствами восстановления после отказов, наличием средств репликации данных и обеспечения высокой доступности, возможностью создания распределённых систем.

тоже относительно популярная.

nc.STRIEM
27.02.2008, 00:41
На хосте стоит форум, все нормально работает, пытаюсь подключиться с другого скрипта к этой же бд с тем же логином и паролем, использую функцию mysql_connect() выдает ошибку Client does not support authentication protocol requested by server; consider upgrading MySQL client

ZaCo
27.02.2008, 00:54
http://www.google.ru/search?aq=-1&oq=old_passwod+mysql&complete=1&hl=ru&newwindow=1&q=old_password+mysql&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

FraiDex
27.02.2008, 01:14
Обучающая статья от ведущего разработчика phpMyAdmin Марка Делисла
Автор: Марк Делисл
Перевод: Иван Шумилов

Данная статья предназначена для веб-мастеров, которые только начинают знакомиться с основами SQL. В качестве инструментария используются сервер баз данных MySQL и интерфейс их администрирования - phpMyAdmin. Последний и будет использоваться в данной статье в качестве инструмента для изучения SQL.

Что такое SQL?
SQL
(англ. Structured Query Language - язык структурированных запросов) - универсальный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Этот язык был разработан IBM (экспериментальная СУБД "System R") в 1974-1979 годах. Первый стандарт языка SQL был принят Американским национальным институтом стандартизации (ANSI) в 1987 (так называемый SQL level 1) и несколько уточнён в 1989 году (SQL level 2), 1992 и 1999 году. После этого, индустрия начала широко использовать SQL как язык реляционных баз данных, и на сегодняшний день практически каждая база данных основана на SQL.
Архитектура данных, к которой обращается SQL называется
реляционной
. В реляционных базах данных все данные представлены в виде простых таблиц, разбитых на строки и столбцы, на пересечении которых расположены данные. Запросы к таким таблицам возвращают таблицы, которые сами могут становиться предметом дальнейших запросов. Каждая база данных может включать несколько таблиц, которые, как правило, связаны друг с другом, откуда и произошло название реляционные.
В данной статье мы будем использовать MySQL, популярную открытую реализацию SQL, которая предоставляется абсолютным большинством хостинг-провайдеров.

Инструментарий для данной статьи
Для выполнения упражнений, приведенных в данной статье, потребуется доступ к MySQL-серверу. В качестве интерфейса для MySQL используется phpMyAdmin - PHP приложение, запущенное на Web-сервере. Для полного ознакомления с возможностями phpMyAdmin рекомендуется прочитать книгу "Mastering phpMyAdmin for effective MySQL Management".
Эта статья познакомит Вас с основами синтаксиса SQL, время от времени, предлагая Вам ввести выражения; покажет, как phpMyAdmin генерирует MySQL-запросы на основе ваших действий через интерфейс.

Создание таблиц в phpMyAdmin
В качестве примера, мы будем использовать географическую информационную систему. Допустим, мы решили, что нам необходима информация о городах и странах - таким образом, нам понадобятся две таблицы, которые будут частью базы данных `geodb`. Для создания таблиц можно использовать вкладку "Structure" на странице просмотра базы данных, или использовать блок SQL-запросов для ввода соответствующего выражения:
Чтобы создать таблицу, воспользуемся выражением CREATE TABLE, в котором мы зададим имя нашей новой таблицы. Выражение начинается с CREATE TABLE, после которой следует имя таблицы. Затем в скобках указывается список столбцов, и информация о ключах. Каждому столбцу дается имя, указывается тип данных, указывается атрибут NULL или NOT NULL (здесь, NOT NULL означает, что колонка не может иметь значение NULL), и значение по умолчанию, если оно уместно.
CREATE TABLE cities ( id int(11) NOT NULL auto_increment, city_name varchar(50) NOT NULL default '', latitude varchar(15) NOT NULL default '', longitude varchar(15) NOT NULL default '', population int(11) NOT NULL default '0', country_code char(2) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM AUTO_INCREMENT=1 ;
Столбец id - это первичный ключ (primary key), колонка, которая уникально идентифицирует каждый город. Тип данных этого столбца - INT (целое число нормального размера), MySQL назначает уникальные значения для этого столбца, благодаря атрибуту auto_increment. Обратите внимание на то, что мы не можем использовать название городов в качестве первичного ключа, т.к. некоторые имена городов не уникальны в мире. Для отображения численности населения мы также используем целое число.
Другие столбцы используют в качестве типов данных строки фиксированной длины (CHAR) либо строки переменной длины (VARCHAR). Когда мы точно знаем длину строки, лучше использовать CHAR, задавая длину столбца как CHAR(2). В противном случае, мы используем в качестве типа данных строки переменной длины, указывая только максимальную длину строки, например: VARCHAR(15).
После списка столбцов, мы можем указать дополнительные параметры таблицы, например, её тип, первое значение для столбца автоинкремента. SQL-выражение заканчивается точкой с запятой.
Создав таблицу для городов, мы делаем ту же операцию, но на этот раз для таблицы стран.
CREATE TABLE countries ( country_code char(2) NOT NULL default '', country_name varchar(100) NOT NULL default '' ) TYPE=MyISAM;
Заметьте, что столбец `country_code` присутствует в обеих таблицах. Это отражает принцип связи: country_code в `cities` связан с одноименным столбцом в таблице `countries`. Таким образом, мы экономим на месте, указывая название страны в базе данных только однажды.
В другой статье (Migrating to InnoDB) техника связывания рассматривается более подробно. После того как таблицы созданы, следует ввести в них какие-нибудь данные.

Изменение табличных данных с помощью phpMyAdmin.
В данном разделе мы изучим базовый синтаксис выражений INSERT, UPDATE, DELETE, и SELECT.

Добавление данных с помощью INSERT
Для начала изучим выражение INSERT, на примере кода, который генерирует phpMyAdmin при выполнении операции INSERT. Для этого открываем вкладку Insert на странице просмотра таблицы `countries`, и вводим данные о стране:
После того как мы кликаем на Go, данные записываются в таблицу и phpMyAdmin показывает нам использованное выражение INSERT:
INSERT INTO `countries` (`country_code` , `country_name` ) VALUES ('ca', 'Canada');
После части INSERT INTO, следует имя таблицы. В MySQL, мы можем заключать имена таблиц и имена столбцов в обратные галочки "`", если в именах используются спецсимволы, зарезервированные слова. Затем мы открываем первую скобку, перечисляем столбцы в которые будет осуществлена вставка, разделяя их друг от друга запятыми. После перечисления списка названий столбцов скобка закрывается и указывается зарезервированное слово VALUES, после которого в скобках перечисляются значения которые нужно вставить в таблицу, причем перечисляются в том же порядке, что и названия столбцов. Если значения имеют символьный тип данных, необходимо заключать их в кавычки.
Давайте занесем в таблицу `cities` данные города:
INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population`, `country_code` ) VALUES ('', 'Sherbrooke', '45 23 59.00', '-71 46 11.00', 125000, 'ca');
Здесь, мы указываем пустое значение для id, потому что атрибут автоинкремента данного столбца обеспечивает автоматическое выставление уникального значения. Также следует обратить внимание, что значение `population` - числовое, поэтому не заключено в кавычки.
Давайте закончим этот раздел вставкой некоторых данных для нескольких других стран и городов, которые понадобятся нам позже.
INSERT INTO `countries` ( `country_code` , `country_name` ) VALUES ('zh', 'China'); INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population` , `country_code` ) VALUES ('', 'Shanghai', '31 13 58.00', '121 26 59.99', 11000000, 'zh');

Обновление данных с помощью UPDATE
Сначала кликните на `Browse` для таблицы `cities` в результате будет выведена пока единственная запись
Кликая по иконке в виде карандаша на бумаге (или ссылке Edit), мы переходим на панель редактирования данной строки. Изменим значение столбца `population` на 130000. После щелчка на `Save`, phpMyAdmin отображает следующее выражение:
UPDATE `cities` SET `population` = '130000' WHERE `id` = '1' LIMIT 1 ;
Ключевое слово в данном выражении - `UPDATE`, за которым следует название таблицы. Слово `SET` предваряет список модификаций (в нашем случае - только для столбца `population`) который записывается в формате "столбец = новое значение".
Мы видим, что в выражении присутствует условие: WHERE `id` = '1', в котором используется первичный ключ, чтобы ограничить изменение значения столбца `population` только данной строкой, т.е. только для данного города.
Часть limit 1 добавляется phpMyAdmin-ом и является гарантией, что если первичный ключ не задан, изменения не будут применены более чем к одной записи.
За один запрос `UPDATE` могут быть изменены значения сразу нескольких столбцов:
UPDATE `cities` SET `city_name` = 'Sherbrooke, Quebec', `population` = '130001' WHERE `id` = '1' LIMIT 1 ;

Удаление данных с помощью DELETE
В режиме `Browse` (просмотр) таблицы `cities`, кликните по красной иконке корзины (или ссылке Delete) - будет сгенерирован запрос, запрашивающий подтверждение выполнения следующего выражения:
DELETE FROM `cities` WHERE `id` = '1' LIMIT 1 ;
Синтаксис здесь очень прост, и включает только название таблицы, и условие при котором будет выполнена операция удаления.
Исключение условия WHERE из запросов UPDATE или DELETE вполне допустимо в SQL, но в таком случае действие выражения будет применено к каждой записи таблицы!

Выборка данных с помощью SELECT
Извлечение информации из таблиц - вероятно наиболее часто используемый вид запроса. Например, запросы SELECT позволяют получить ответы на подобные вопросы: "какие города имеют численность населения большую, чем данное число?".
Фактически, мы уже предварительно использовали SELECT, когда кликали на ссылку Browse для таблицы `cities`. Это сгенерировало простейшую форму выражения запроса SELECT:
SELECT * FROM `cities` LIMIT 0,30;
Звездочка здесь означает "все столбцы". Мы добавили FROM и имя таблицы, в которой будет выполнен запрос на выборку. LIMIT 0,30 означает что выборка начинается с записи номер 0 (самой первой), и содержит максимум 30 записей.
Вкладка Search позволяет увидеть большее количество опций для запроса SELECT. Выберем вкладку Search для таблицы cities, и выберем только те столбцы, которые нам нужны:
Затем справа от списка столбцов мы выберем порядок сортировки полученной выборки по столбцу `population` по убыванию:
В результате phpMyAdmin сгенерирует следующий запрос:
SELECT `city_name` , `population`
FROM `cities`
WHERE 1
ORDER BY `population` DESC LIMIT 0,30;
Мы видим, что звездочка была заменена списком столбцов, разделенных запятыми. Условие WHERE 1, добавленное phpMyAdmin-ом, всегда истинно и выбирает все записи. Чуть позже мы увидим, что можно заменить его другим условием. Кроме того, появляется условие ORDER BY , после которого следует название столбца по которому мы хотим сортировать результат выборки, и ключевое слово DESC для сортировки по убыванию (мы могли также использовать ASC для сортировки по возрастанию).

Условия в SQL-запросах
Самым простым способом добавить условие - клик по SQL-query: Edit, на странице результатов, в результате которого будет открыто всплывающее окно "Query". Добавим условие для столбца `country`:
SELECT `city_name` , `population`
FROM `cities`
WHERE country_code = 'zh'
ORDER BY `population` DESC;
Это условие выберет все города, находящиеся в Китае. При обозначении условий может быть использовано богатое множество операторов и функций. Вот - два примера:
Найти канадские города с численностью населения более 100000:
WHERE population > 100000 AND country_code = 'ca';
Найти города, чьи названия начинаются с символа "A":
WHERE city_name like 'A%'

Функции группировки
Итоговая информация может быть сгенерирована в результате группировки по определенному столбцу. Давайте узнаем среднюю численность городского населения в стране:
SELECT country_code, AVG(population)
FROM cities
GROUP BY country_code

Другие возможные функции группировки - MIN(), MAX(), SUM() и COUNT(), которые вычисляют соответственно минимальное значение, максимальное значение, сумму значений, и число записей. Например, с помощью следующего запроса мы можем получить число городов в стране:
SELECT country_code, count(city_name) FROM cities
GROUP BY country_code;

Объединения
Обычно, реляционная база данных включает множество таблиц, связанных общими ключами. Часто возникает необходимость в запросах сразу для нескольких таблиц. Связать, или объединить, таблицы можно с помощью различных методов; мы сосредоточимся на самом простом методе, заключающемся в сравнении ключей.
В нижерассмотренном запросе, условие FROM содержит список названий таблиц, разделенных запятыми. В списке столбцов, мы используем названия таблиц и точку в качестве префикса перед каждым названием столбца (в этом нет необходимости в случае, если все столбцы из одной таблицы).
SELECT cities.city_name, cities.population, countries.country_name
FROM cities, countries
WHERE cities.country_code = countries.country_code LIMIT 0,30

Заключение
Те элементарные выражения, что были рассмотрены нами здесь не раскрывают полностью возможности SQL. Однако, эта статья поверхностно осветила основы SQL, и показала как использовать phpMyAdmin в качестве инструмента для углубления знаний в SQL.

Об авторе
Марк Делисл начал свое участие в развитии phpMyAdmin в декабре 1998 (именно он разработал первую многоязычную версию). С мая 2001, принимал активное участие в проекте как разработчик и проектный администратор.
Работает с 1980 в колледже Cegep de Sherbrook (Квебек, Канада), разработчиком программного обеспечения и системным администратором. Он также преподавал организацию сети, безопасность, серверы Linux, и прикладное программирование PHP/MySQL.
Издательство Packt Publishing выпустило первую книгу по phpMyAdmin: Mastering phpMyAdmin for effective MySQL Management, автором которой является Марк Делисл

Первоисточник: http://www.php-editors.com

Scipio
27.02.2008, 01:31
Гы, это он значит косяки в phpMyAdmin допустил и вверг меня тем самым в некоторые заблуждения отнасительно синтаксиса, я имею ввиду косяки не в плане безопасности (которые тоже есть кстати) а косяки в плане SQL

Coder007
03.03.2008, 00:09
Y menia vopros,kak zapustit' MySql5 iz komandnoi stroki
C:\WebServer\usr\local\mysql5\bin\mysql -u root -p mysql ;ne zapyskaetsia,parol' ia ne menial :confused: ?
Mysql4 idet bez problem,a Mysql5 ne hochet.

bul.666
03.03.2008, 08:27
C:\WebServer\usr\local\mysql5\bin\mysql -uroot -pmysql

Coder007
03.03.2008, 19:49
c:\WebServers\usr\local\mysql5\bin>mysql -uroot -pmysql
mysql: Character set 'cp1251' is not a compiled character set and is not specifi
ed in the '\usr\local\mysql5\share\charsets\Index.xml' file

bul.666
04.03.2008, 10:05
Это не ошибка конекта
Ищи проблему в mysql5\share\charsets\Index.xml
Видимо не может установить кодировку cp1251, т.к. она не указана в том файле =\

Coder007
04.03.2008, 20:21
bul.666!Y menia Vista,russckie progi idyt,codirovki toge.I esche voprosik-dlia treninga po
SQL-injection Denver3 podhodit ili est' cheto luchshe?;)

bul.666
04.03.2008, 20:23
Да

x88x
06.03.2008, 15:48
уже разобрался =)

Doom123
06.03.2008, 20:01
мускуль 5.1 не понимает запос вида


SELECT count FROM items WHERE owner_id=53 AND item_id=52




выдаёт

ERROR 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 'SELECT count FROM items WHERE owner_id=53 AND item_id=52' at line 3
mysql>

bul.666
06.03.2008, 20:24
SELECT count
count это название или функция?

Helios
06.03.2008, 20:30
Ипользуй кавычки для отделения имен полей и значений

SELECT `count` FROM `items` WHERE `owner_id` = '53' AND `item_id` = '52'

Это раз.

Два:
мускул говорит, что у тебя ошибка в третей строке запроса, сам же запрос однострочный, еще видно, что работал в консоли, отсюда вывод, что перед этим запросом были другие, после который не была проставлена ";", поэтому мускул понял этот запрос как часть другого и матюгнулся

Doom123
06.03.2008, 20:31
Название

blackybr
06.03.2008, 20:35
юзай `` при врубленной директиве игнор спейсис или анси у тебя распознается скорее всего как ф-ия а не колонка count, т.к. она в мускуле зарезервированна.. и.. почему на 3ей строке? Оо

Manoz
06.03.2008, 20:36
Ребят, подскажите команду для вывода данных, причем чтобы они шли через какой нибудь знак (допустим ':'):
SELECT id,email FROM data INTO OUTFILE 'D:/test.txt' ... (дальше как? я насколько помню надо было писать fields defined by ':' - забыл просто))))
В конечном итоге чтобы вид был:
id1:email1
id2:email2

blackybr
06.03.2008, 20:37
... concat(id,':',email) ...

Manoz
06.03.2008, 20:49
... concat(id,':',email) ...
Спасибо за помощь blackybr, но это не то...
Надо чтобы из базы вытягивались id и email и писались в файл разделенные :.

забыл сказать что это mysql

blackybr
06.03.2008, 20:53
как не то ? сам же сказал
Надо чтобы из базы вытягивались id и email и писались в файл разделенные :

SELECT concat(id,char(58),email) FROM data INTO OUTFILE 'D:/test.txt'

ну или незакодированным : в кавычко

Manoz
06.03.2008, 20:58
Во!!! Ты просто гений! Теперь все заработало)))) ++
Огромное спасибо =)

Cecil B Demented
23.03.2008, 12:11
Подскажите, нужно ли обязательно закрывать соединение с бд как mysql_close($link);
после того как скрипт к примеру полностью отработал и выдал результат?
Сильно ли это влияет на производительность?

blackybr
24.03.2008, 20:24
возник вопрос

можно ли без сторонних языков, только возможностями mysql произвести сл. действия:

есть табла, с числовой колонкой, со значениями одинаковой длинны (к примеру значения 12345, 91311, 12912, 90122, 64400 и тд).
так вот, можно ли используя только скл запрос заменить ВСЕ опеределеенные значения на другие (конкретные, для примера возьмем 1 заменить на 7, 2 на 4, 3 на 5 ), так что после запроса у нас бы было 74545, 97577 и тд..)

естественно надо изменять не каждое отдельное значение, ведь их имеется не один десяток тысяч.

krypt3r
25.03.2008, 11:24
Если поле фиксированной длины, то можно попробовать вот так:

mysql> select * from test;
+-------+------+
| id | link |
+-------+------+
| 12345 | 1 |
| 91311 | 2 |
| 12912 | 3 |
| 90122 | 4 |
| 64400 | 5 |
+-------+------+
5 rows in set (0.00 sec)

mysql> create temporary table testtest (link int, a1 int, a2 int, a3 int, a4 int, a5 int) select link, floor(id/10000) as a1, floor(id/1000)-floor(id/10000)*10 as a2, floor(id/100)-floor(id/1000)*10 as a3, floor(id/10)-floor(id/100)*10 as a4, mod(id,10) as a5 from test;
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select * from testtest;
+------+------+------+------+------+------+
| link | a1 | a2 | a3 | a4 | a5 |
+------+------+------+------+------+------+
| 1 | 1 | 2 | 3 | 4 | 5 |
| 2 | 9 | 1 | 3 | 1 | 1 |
| 3 | 1 | 2 | 9 | 1 | 2 |
| 4 | 9 | 0 | 1 | 2 | 2 |
| 5 | 6 | 4 | 4 | 0 | 0 |
+------+------+------+------+------+------+
5 rows in set (0.01 sec)

mysql> update testtest set a1=(case a1 when 1 then 7 when 2 then 4 when 3 then 5 else a1 end), a2=(case a2 when 1 then 7 when 2 then 4 when 3 then 5 else a2 end), a3=(case a3 when 1 then 7 when 2 then 4 when 3 then 5 else a3 end), a4=(case a4 when 1 then 7 when 2 then 4 when 3 then 5 else a4 end), a5=(case a5 when 1 then 7 when 2 then 4 when 3 then 5 else a5 end);
Query OK, 4 rows affected (0.00 sec)
Rows matched: 5 Changed: 4 Warnings: 0

mysql> update test t1 inner join testtest t2 using (link) set t1.id = t2.a1*10000+t2.a2*1000+t2.a3*100+t2.a4*10+t2.a5;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 5 Changed: 4 Warnings: 0

mysql> select * from test;
+-------+------+
| id | link |
+-------+------+
| 74545 | 1 |
| 97577 | 2 |
| 74974 | 3 |
| 90744 | 4 |
| 64400 | 5 |
+-------+------+
5 rows in set (0.00 sec)

4NT1P0V
25.03.2008, 22:55
Подскажите, хочу установить автоматическую раздачу icq номеров, как лучше, делать для нее отдельную БД или в общую вместе с булкой???

it's my
28.03.2008, 12:37
ы.... что нужно написать что бы создать БД с именем HATE и в ней две таблицы:

downchat_messages
id - bigint
date - tinytext
name - text
style - text
text - text

downguest_messages
id - bigint
datetime - tinytext
name - tinytext
mail - tinytext
url - tinytext
text - text


с меня +++++++++++++ и 50 сообщений в личку с респектами

desTiny
28.03.2008, 12:46
$sql1= 'CREATE TABLE `downchat_messages` ('
. ' `id` BIGINT NOT NULL , '
. ' `date` TINYTEXT NOT NULL, '
. ' `name` TEXT NOT NULL, '
. ' `style` TEXT NOT NULL, '
. ' `text` TEXT NOT NULL'
. ' )';
$sql2= 'CREATE TABLE `downguest_messages` ('
. ' `id` BIGINT NOT NULL , '
. ' `datetime` TINYTEXT NOT NULL, '
. ' `name` TEXT NOT NULL, '
. ' `mail` TEXT NOT NULL, '
. ' `url` TEXT NOT NULL, '
. ' `text` TEXT NOT NULL'
. ' )';

Как-то так...

krypt3r
28.03.2008, 12:50
Вообще-то сначала надо

CREATE DATABASE hate;

Уж потом CREATE TABLE. На поля id, возможно, повесить PRIMARY KEY

desTiny
28.03.2008, 12:50
Хотя ты наверное хочешь, чтобы id был
а) первичным
б) автоинкрементируемым

Тогда
сторочка с id будет такой:
. ' `id` BIGINT NOT NULL AUTO_INCREMENT, '

а последние - такими:

. ' `text` TEXT NOT NULL,'
. ' PRIMARY KEY (`id`)'
. ' )';

Foes
03.04.2008, 01:17
Здравствуйте, у меня вопрос: Как предотвратить неконтролируемое увеличение размера журнала транзакций? в mssql server 2005

Isis
03.04.2008, 04:08
Foes, http://support.microsoft.com/kb/873235/ru

Foes
03.04.2008, 16:33
Isis, это тупо в гугл набрал: Как предотвратить неконтролируемое увеличение размера журнала транзакций
Это общая информация и это я уже видел и читал.

DEMOGORGON
06.04.2008, 17:40
В чём проблема?
Ввожу данные в таблицу БД всё нормально.
А вот при выводе выборки на страницу транслит отоброжается как надо, а кирилица - чёрт знает как.

Isis
06.04.2008, 19:29
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

DEMOGORGON
09.04.2008, 09:16
Isis, спасибо, что нашёл ошибку.

VDShark
09.04.2008, 09:24
Здравствуйте, у меня вопрос: Как предотвратить неконтролируемое увеличение размера журнала транзакций? в mssql server 2005
Вообще это неоднозначный вопрос. Например бэкапить базу каждый день\два\неделю (нужное подчеркнуть, смотря какая интенсивность заполнения и тп) - и после бэкапа с чистой совестью чистить журнал, т.к. бэкап у нас есть, и мы в случае чего сможем с чистой совестью его "накатить".

krypt3r
09.04.2008, 09:42
Разросшийся журнал транзакций можно урезать. Сначала сделать в Query Analyzer

BACKUP LOG dbname WITH NO_LOG
BACKUP LOG dbname WITH TRUNCATE_ONLY

Потом сделать Shrink Database, где в списке выбрать не базу (dbname_Data), а журнал транзакций (dbname_Log)

1SeTh
11.04.2008, 20:04
как можно заюзать такую ошибку? извините если не правильно запостился

An error occurred while evaluating the expression:

"#Chr(64+ID)#"

Error near line 3, column 34.
--------------------------------------------------------------------------------

Cannot convert 1' to number.

Please, check the ColdFusion manual for the allowed conversions between data types

The error occurred while processing an element with a general identifier of (CFPARAM), occupying document position (3:1) to (3:46).

Date/Time: 04/11/08 11:02:55
Browser: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QS 4.2.1.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Remote Address: какой нить
Query String: ID=1'

Buffalon
12.04.2008, 15:48
Здрасте... .Решил написать да/Вроде тема отсюда )
Как вот это можно реализовать >PHP<+MySQL
3. Управление распределённой БД
Макс. балл: 120.
Макс бонус балл: 54.
Задание:
1. Имеется распределенная БД, состоящая из 3 серверов MySQL.
2. Требуется написать клиент к данной БД, реализующий функции SELECT / INSERT / DELETE / UPDATE / ALTER / CHANGE.
3. Пользователь, используя, данный клиент, не должен знать о том, что БД – распределённая. Связь серверов осуществляется посредством сокетов.
<pre>Олмпиада по интернет-программированию 2006г</pre>

neval
14.04.2008, 22:50
Здрасте... .Решил написать да/Вроде тема отсюда )
Как вот это можно реализовать >PHP<+MySQL
3. Управление распределённой БД
Макс. балл: 120.
Макс бонус балл: 54.
Задание:
1. Имеется распределенная БД, состоящая из 3 серверов MySQL.
2. Требуется написать клиент к данной БД, реализующий функции SELECT / INSERT / DELETE / UPDATE / ALTER / CHANGE.
3. Пользователь, используя, данный клиент, не должен знать о том, что БД – распределённая. Связь серверов осуществляется посредством сокетов.
<pre>Олмпиада по интернет-программированию 2006г</pre>


с википедии содрал? тэги тоже? ))


а как пользователь узнает (пользуясь скрипт-клиентом) к какой БД он коннектиться?

stomp
15.04.2008, 00:37
Т.к. здесь вопросы по бд, тут и задам. У меня есть 3 таблицы, во всех трех есть id пользователя, но в одной базе(я её сам создавал) - нету id, поле есть, но как данные перенести туда я не знаю, т.к. в этой 3 таблице есть поля в которые нужно скопировать данные из 1 и 2 таблицы. Желательно сделать привязку 3 таблицы к 1 и 2, я что-то читал про cascade, но ведь 3 таблица пустая... Пытался в доках найти, но на Mysql.ru что-то ничего нужно не вычитал(
у меня phpmyadmin стоит, если кто может - объясните как через него сделать.

krypt3r
15.04.2008, 07:23
stomp, если я правильно понял, то так.
Предположим, в таблице t1 хранятся имена, в таблице t2 - адреса соответствующие именам адреса. В таблицу t3 надо запихать ид пользователя, его имя и адрес (объединенные данные из первых двух таблиц)

mysql> select * from t1;
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Mary |
| 3 | Suzen |
| 4 | James |
| 5 | Carry |
+------+-------+
5 rows in set (0.01 sec)

mysql> select * from t2;
+------+------------+
| id | address |
+------+------------+
| 1 | Washington |
| 2 | New York |
| 3 | Washington |
| 4 | Oklahoma |
| 5 | Texas |
+------+------------+
5 rows in set (0.01 sec)

mysql> insert into t3 select t1.id, t1.name, t2.address from t1 left join t2 using (id);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select * from t3;
+------+-------+------------+
| id | name | address |
+------+-------+------------+
| 1 | John | Washington |
| 2 | Mary | New York |
| 3 | Suzen | Washington |
| 4 | James | Oklahoma |
| 5 | Carry | Texas |
+------+-------+------------+
5 rows in set (0.00 sec)

stomp
15.04.2008, 10:35
Да спасибо, частично понял, как понять:
left join t2 using (id); ??

И что сделать, чтобы при добавлении данных в таблицы 1 и 2 - они сразу же добавлялись к 3? использовать cascade?

Mobile
15.04.2008, 11:21
Да спасибо, частично понял, как понять:
left join t2 using (id); ??


это объединение таблиц t1 и t2, юзаем поле id
тоесть то, которое заносим в t3

stomp
15.04.2008, 13:53
что сделать, чтобы при добавлении данных в таблицы 1 и 2 - они сразу же добавлялись к 3? использовать cascade?


Вообщем после набора insert.... и т.д. мне выдало:

ERROR 1136 (21S01): Column count doesn't match value count at row 1
Все поля в 3 таблице null не понимаю в чем может быть проблема?

MooMooM
23.04.2008, 08:22
Люди подскажите веб клиент типа phpmyadmin, только на mssql

krypt3r
23.04.2008, 08:53
EasyXQuery

Корвин
27.04.2008, 23:56
{
$dt=date('Y-m-d H:i:s');
mysql_query('INSERT INTO messages VALUES(NULL,'.$_SESSION['id'].','.$lg['id'].',"'.$_POST['subject'].'","'.$_POST['msg'].'","'.$dt.'",0);');
}


народ , подскажите почему не записывается инфа в БД? что не так написано?

krypt3r
28.04.2008, 08:49
Корвин, попробуй заюзать так

{
$dt=date('Y-m-d H:i:s');
$subject = mysql_real_escape_string ($_POST['subject']);
$msg = mysql_query_escape_string ($_POST['msg']);
mysql_query('INSERT INTO messages VALUES (NULL, \'' . $_SESSION['id'] . '\',\'' . $lg['id'] . '\',\'' . $subject . '\',\'' . $msg . '\',\'' . $dt . '\',0)') or die (mysql_errno() . ':' . mysql_error());
}

Корвин
28.04.2008, 09:27
попробовал код, выводит ошибку

Fatal error: Call to undefined function mysql_query_escape_string()

... сделал так :


{
$dt=date('Y-m-d H:i:s');
$subject = $_POST['subject'];
$msg = $_POST['msg'];
mysql_query('INSERT INTO messages VALUES (NULL, \'' . $_SESSION['id'] . '\',\'' . $lg['id'] . '\',\'' . $subject . '\',\'' . $msg . '\',\'' . $dt . '\',0)') or die (mysql_errno() . ':' . mysql_error());
}


все заработало

krypt3r
28.04.2008, 11:23
Я там с кодом ступил =))

$msg = mysql_real_escape_string ($_POST['msg']);

Сорри

ЗЫ. Корвин, дай линк на свой движок, я в скулях потренируюсь =))

Корвин
28.04.2008, 11:49
всмысле доступ к фтп? сорь, мне за это голову открутят=)

:cool: конфиденциально :cool:


PS и зачем этот реал ескейп? если как йа сделал все заработало...

Mobile
29.04.2008, 20:19
PS и зачем этот реал ескейп? если как йа сделал все заработало...
дай адрес сайта где твой двиг лежит, я тебе фокус покажу)))

Корвин
30.04.2008, 06:22
$ayd = $_POST['id'];
$ayduser = $_POST['id_user'];
$taskname = $_POST['name'];
$taskstatus = $_POST['status'];
$taskpriority = $_POST['priority'];
$taskcomments = $_POST['comments'];
$tasktask = $_POST['task'];
mysql_query('UPDATE `tasks` SET `id_user`="'.$ayduser.'", `name`="'.$taskname.'", `status`="'.$taskstatus.'", `priority`="'.$taskpriority.'", `comments`="'.$taskcomments.'", `task`="'.$tasktask.'" WHERE `id`="'.$ayd.'" LIMIT 1;');
Header('Location:index.php');


поидее должна обновлятся инфа в елементе с айдишником - $ayd, но у меня почему то создается еще один в котором первые три параметра равны нулю а остальные из формы которую заполнял, что не так подскажите плиз...

НTL
30.04.2008, 11:07
А где можно почитать что такое SQL, mySQL?
И как делать БД

zythar
30.04.2008, 12:12
http://dev.mysql.com/

FeraS
30.04.2008, 12:29
НTL
http://aeweb.ru/books/php_book/103-spravochnik-po-jazyku-mysql.html

НTL
30.04.2008, 13:02
НTL
http://aeweb.ru/books/php_book/103-spravochnik-po-jazyku-mysql.html

Спс за рус описание

НTL
30.04.2008, 14:30
а как открыть pdf файлы?

Kaimi
30.04.2008, 14:52
Acrobat Reader

Buffalon
13.05.2008, 21:42
$ayd = $_POST['id'];
$ayduser = $_POST['id_user'];
$taskname = $_POST['name'];
$taskstatus = $_POST['status'];
$taskpriority = $_POST['priority'];
$taskcomments = $_POST['comments'];
$tasktask = $_POST['task'];
mysql_query('UPDATE `tasks` SET `id_user`="'.$ayduser.'", `name`="'.$taskname.'", `status`="'.$taskstatus.'", `priority`="'.$taskpriority.'", `comments`="'.$taskcomments.'", `task`="'.$tasktask.'" WHERE `id`="'.$ayd.'" LIMIT 1;');
Header('Location:index.php');


поидее должна обновлятся инфа в елементе с айдишником - $ayd, но у меня почему то создается еще один в котором первые три параметра равны нулю а остальные из формы которую заполнял, что не так подскажите плиз...
Всмысле ... ?Он Сделает UPDATE а потом обнулиться.. ..?Если даже ты ничо незаполнил всё равно будет UPDATY)))

Корвин
21.05.2008, 11:06
Всмысле ... ?Он Сделает UPDATE а потом обнулиться.. ..?Если даже ты ничо незаполнил всё равно будет UPDATY)))



да я уже разобрался, там косяк был, не на тот скрипт вел action

sky7
27.05.2008, 23:04
как правильно создать таблицу в MySQL, чтоб после удаления какой либо запись ключ начинался с 1,
и каждая новая запись добавлялась в конце таблицы?

groundhog
27.05.2008, 23:21
Почитай принципы организации реляционных баз данных, труды Кодда из темы "A Relational Model of Data for Large Shared Data Banks" и тогда ты поймёшь какую чушь ты спрашиваешь... Кодд в гробу уже несколько раз, наверное, перевернулся... Ознакомься с 12 правилами Кодда:

http://ru.wikipedia.org/wiki/12_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%9A%D0% BE%D0%B4%D0%B4%D0%B0

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

z01b
27.05.2008, 23:51
$ayd = $_POST['id'];
$ayduser = $_POST['id_user'];
$taskname = $_POST['name'];
$taskstatus = $_POST['status'];
$taskpriority = $_POST['priority'];
$taskcomments = $_POST['comments'];
$tasktask = $_POST['task'];
mysql_query('UPDATE `tasks` SET `id_user`="'.$ayduser.'", `name`="'.$taskname.'", `status`="'.$taskstatus.'", `priority`="'.$taskpriority.'", `comments`="'.$taskcomments.'", `task`="'.$tasktask.'" WHERE `id`="'.$ayd.'" LIMIT 1;');
Header('Location:index.php');

Оффтоп:
Твой скрипт уязвим к SQL Injection. Стоит данные фильтровать при запросе к бд.

VDShark
28.05.2008, 09:15
как правильно создать таблицу в MySQL, чтоб после удаления какой либо запись ключ начинался с 1,
и каждая новая запись добавлялась в конце таблицы?
О боги... что за покаление, что за мозгожрущий сверхмаразм... Почему каждый своим долгом счтает спросить это?)
Нынче принято проектировать и работать с БД, не зная элементарных вещей... =\
А по теме пример: допустим у тебя есть две таблицы:
работники и отделы. В таблице работники идет внешний ключ на первичный синтетический ключ (тот, который ты хочешь менять) таблицы отделы. И вот представь: что то ты там намутил в своей базе, у тебя в таблице отделы начинают значения первичного ключа меняться... а со связанными таблицами что делать то? Перелопачивать все? Если база большая - а это практически всегда - это никому не нужное дело и титанческие нагрузки на серв... Спрашивается - а нафига это делать, когда все будет работать, если мы просто-напросто ничего не будем трогать?
А вообще причина конечно же кроется не только в этом, но это я привел для примера - что бы тебе хоть немного стало ясно.

sky7
29.05.2008, 01:39
спс за ответы

Buffalon
31.05.2008, 14:04
Здрасте... .Мне php_bug_scaner что у миня подозрение на ошибку в

mysql_query("INSERT INTO `user_ip`( `user_id` , `user_name` , `user_ip` ) VALUES ('". $user_id ."', '". $user_name ."', '". $user_ip ."')")
И вообще вывел мне все mysql_query
Я всё правильно сделал?Или она просто выдаёт возможные ошибки?

Корвин
31.05.2008, 22:01
Здрасте... .Мне php_bug_scaner что у миня подозрение на ошибку в

mysql_query("INSERT INTO `user_ip`( `user_id` , `user_name` , `user_ip` ) VALUES ('". $user_id ."', '". $user_name ."', '". $user_ip ."')")
И вообще вывел мне все mysql_query
Я всё правильно сделал?Или она просто выдаёт возможные ошибки?


вроде все верно, единственно у меня в таком коде в конце в самом );'); , двоеточие между двумя скобками, может в этом дело....


PS php_bug_scaner это что?

ntldr
02.06.2008, 11:48
как можно прочитать бинарные логи?

SQLHACK
02.06.2008, 12:15
Здрасте... .Мне php_bug_scaner что у миня подозрение на ошибку в

mysql_query("INSERT INTO `user_ip`( `user_id` , `user_name` , `user_ip` ) VALUES ('". $user_id ."', '". $user_name ."', '". $user_ip ."')")
И вообще вывел мне все mysql_query
Я всё правильно сделал?Или она просто выдаёт возможные ошибки?

ну тут может ругатся на то что если $user_id, $user_name, $user_ip вставляются без проверок, если например user_name будет равен '(select version()),1)/* то это будет просто скуля в инсерте.

Buffalon
02.06.2008, 17:09
ну тут может ругатся на то что если $user_id, $user_name, $user_ip вставляются без проверок, если например user_name будет равен '(select version()),1)/* то это будет просто скуля в инсерте.
О0о... .спс те).. .Всё равно всё проверяется)

Isis
03.06.2008, 03:59
как можно прочитать бинарные логи?
http://dev.mysql.com/doc/refman/4.1/en/mysqlbinlog.html

Freakazoitt
03.06.2008, 10:08
Сайту нужны еще две базы данных (там только одну дают)
Как можно устроить подключение других баз данных?
Предоставляют ли бесплатно их где-нибудь для этих целей?

groundhog
03.06.2008, 10:35
А все табы хранить в одной, используя другие префиксы таблиц?

SUBJECT617
08.06.2008, 22:46
А как возможно сделать дамп например выданного по такому запросу:

SELECT email,bla-bla FROM members
WHERE email like '%yandex.ru' ?
Доки читал но чет невтыкается =/

Mobile
08.06.2008, 23:27
В каком смысле дамп? объясни получше

mff
08.06.2008, 23:36
SUBJECT617 делай dump всей таблицы members, а там уже заберешь майлы с доменом yandex.ru

SUBJECT617
08.06.2008, 23:43
2 mmf Я вообще так и делал, просто надеялся что можно полегче...
2 mobile Ой.. Нето разве? Дамп - не копия БД?

mff
09.06.2008, 01:02
А как возможно сделать дамп например выданного по такому запросу:

SELECT email,bla-bla FROM members
WHERE email like '%yandex.ru' ?
Доки читал но чет невтыкается =/

ну по идеи этот запрос выберет из столбца email все мыла с доменом yandex, только их нужно как то представить протом на php

VDShark
09.06.2008, 01:24
А как возможно сделать дамп например выданного по такому запросу:

SELECT email,bla-bla FROM members
WHERE email like '%yandex.ru' ?
Доки читал но чет невтыкается =/

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

INSERT INTO new_table SELECT email,bla-bla
FROM members
WHERE email like '%yandex.ru'

Естественно new_table должна иметь структуру, соотв. подзапросу и типы данных должны быть идентичны (ну или совместны).

krypt3r
09.06.2008, 07:19
Еще один способ вывода результата запроса в файл

SELECT email,bla-bla FROM members
WHERE email like '%yandex.ru'
INTO OUTFILE '/полный/путь/к/файлу.txt'

VDShark
09.06.2008, 15:35
Еще один способ вывода результата запроса в файл

SELECT email,bla-bla FROM members
WHERE email like '%yandex.ru'
INTO OUTFILE '/полный/путь/к/файлу.txt'

Угу, и кому такой ббэкап нужен? Он же наверное в последствии восстановить его хочет, а не просто почитать... А для восттановления это все дело прийдется распарсивать =\ А при большом объеме это ох как напряжно :)

SUBJECT617
09.06.2008, 15:48
Ага... В итоге все можно перекинуть руками в Exel, но для 3к+ БД будет напряжно. Да и все хэши сбручивать надо...

VDShark
09.06.2008, 15:58
Ага... В итоге все можно перекинуть руками в Exel, но для 3к+ БД будет напряжно. Да и все хэши сбручивать надо...
По моему предложенный мною вариант, с новой таблицей, самый подходящий в твоем случае.

groundhog
09.06.2008, 16:01
Мужики, харош фигню нести! Тип явно написал, что хочет сохранить результат выполнения селекта. Криптор дал исчерпывающий ответ. Всё тема закрыта.

Isis
09.06.2008, 19:17
Скачайте ISPsystem, разберите , там есть нужное вам :)

mff
12.06.2008, 21:22
Подскажите, как на php получить id только что добавленной строчки в базу MySQL?
Спасибо!

NOmeR1
12.06.2008, 21:41
echo mysql_insert_id();

.Slip
12.06.2008, 21:50
Подскажите, как на php получить id только что добавленной строчки в базу MySQL?
Спасибо!
$var = mysql_query("SELECT id FROM test.coments ORDER BY 1 DESC LIMIT 0,1");
echo mysql_result($var, 0);

mff
12.06.2008, 21:55
$var = mysql_query("SELECT id FROM test.coments ORDER BY 1 DESC LIMIT 0,1");
echo mysql_result($var, 0);


echo mysql_insert_id();

Спасибо Гуры :) Завтра по + с меня!

DTW
15.06.2008, 15:36
Почему не может выполнить запрос ?
Проблема в верс ? у меня 4 верс

------------------------------------------------------------------------------
-- Installtion for Saga Login Database--
DROP TABLE IF EXISTS `login`;
CREATE TABLE `login` (
`account_id` int(10) NOT NULL auto_increment,
`username` varchar(25) collate utf8_unicode_ci NOT NULL default '',
`password` varchar(50) collate utf8_unicode_ci NOT NULL default '',
`sex` tinyint(3) unsigned NOT NULL default '1',
`lastlogin` varchar(25) collate utf8_unicode_ci NOT NULL default '',
`Banned` tinyint(3) NOT NULL default '0',
PRIMARY KEY (`account_id`),
KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Procedures
--
DELIMITER $$
--
CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginAddUser`(
name varchar(25),
pass varchar(50),
gender tinyint(3),
last varchar(25))
BEGIN
INSERT INTO `login` (`username`,`password`,`sex`,`lastlogin`) VALUES (name,pass,gender,last);
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginGetAccountId`(name varchar(20))
BEGIN
SELECT `account_id` FROM `login` WHERE `username`=name;
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginGetUser`(name varchar(20))
BEGIN
SELECT * FROM `login` WHERE `username`=name LIMIT 1;
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginUpdateUser`(
name varchar(25),
pass varchar(50),
gender tinyint(3),
last varchar(25))
BEGIN
UPDATE `login` SET `password`=pass, `sex`=gender, `lastlogin`=last WHERE `username`=name;
END$$

--
DELIMITER ;
--
--------------------------------------------------------------------------

Isis
15.06.2008, 15:44
DTW, а выполняешь запрос хоть на InnoDB?

DTW
15.06.2008, 15:54
Да InnoDB

Он с этим не хочет че дружить

DELIMITER $$
--
CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginAddUser`(
name varchar(25),
pass varchar(50),
gender tinyint(3),
last varchar(25))
BEGIN
INSERT INTO `login` (`username`,`password`,`sex`,`lastlogin`) VALUES (name,pass,gender,last);
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginGetAccountId`(name varchar(20))
BEGIN
SELECT `account_id` FROM `login` WHERE `username`=name;
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginGetUser`(name varchar(20))
BEGIN
SELECT * FROM `login` WHERE `username`=name LIMIT 1;
END$$

CREATE DEFINER=`saga`@`localhost` PROCEDURE `sagaLoginUpdateUser`(
name varchar(25),
pass varchar(50),
gender tinyint(3),
last varchar(25))
BEGIN
UPDATE `login` SET `password`=pass, `sex`=gender, `lastlogin`=last WHERE `username`=name;
END$$

--
DELIMITER ;
--



Думаю проблема вер сервера у меня 4.1 а надо 5

Isis
15.06.2008, 16:44
DELIMITER $$
DELIMITER ;

VDShark
15.06.2008, 16:45
Dtw Мускул стал держать хранимые процедуры начиная с версии 5.0... а стабильно и того позже. Думаю дело в этом)

Nickotin
15.06.2008, 17:35
Кстати да,солидарен.

VDShark
21.06.2008, 18:52
Впринципе все легко - одно НО.
По данной структуре не пойму (хотя особо не думал) вот это:

7.Вывести предметы, читающиеся хотя бы в двух семестрах.

Т.е. в таблице м.б. нсколько одноименных предметов с разными идентификаторами? Другого варианта не вижу

VDShark
21.06.2008, 22:04
Структура таблиц

CREATE TABLE `Lecturers` (
`id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`fio` VARCHAR( 100 ) NOT NULL ,
`rank` VARCHAR( 40 ) NOT NULL ,
`post` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

CREATE TABLE `disciplines` (
`id` int(5) unsigned NOT NULL auto_increment,
`title` varchar(70) NOT NULL,
`semestr` int(2) NOT NULL,
`form` enum('exam','setoff','other') NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `schedule` (
`id_lector` int(5) UNSIGNED NOT NULL,
`id_discipline` int(5) UNSIGNED NOT NULL,
`weekday` enum('Понедельник','Вторник','С реда','Четверг','Пятница','Су бота','Воскресенье') NOT NULL,
PRIMARY KEY (`id_lector`,`id_discipline`),
FOREIGN KEY (`id_lector`) REFERENCES `lecturers`(`id`),
FOREIGN KEY (`id_discipline`) REFERENCES `disciplines`(`id`)
);

Если что не нравится - можешь поменять :)
Вот собственно сами запросы:

1) SELECT * FROM `lecturers` WHERE `rank`='Кандидат Наук'
----------------------
2)SELECT DISTINCT `fio`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
WHERE `d`.`form`='exam' AND (`id_lector`,`semestr`) <> ALL(
SELECT `id_lector`,`semestr`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
WHERE `d`.`form`<>'exam'
)
----------------------
3) SELECT DISTINCT `fio`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
WHERE `d`.`form`='setoff'
----------------------
4) SELECT * FROM lecturers`
----------------------
5) SELECT DISTINCT `l`.`fio`
FROM `lecturers` as `l`
JOIN `schedule` as `sc` on `l`.`id`=`sc`.`id_lector`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
WHERE `l`.`id` <> ALL(
SELECT `l`.`id`
FROM `lecturers` as `l`
JOIN `schedule` as `sc` on `l`.`id`=`sc`.`id_lector`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
WHERE `d`.`semestr` NOT IN (3,4))
----------------------
6) SELECT `fio`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
WHERE `l`.`rank` = 'Кандидат Наук' AND (`d`.`semestr`=7 OR `d`.`semestr`=8)
----------------------
7) SELECT `title`
FROM `disciplines`
GROUP BY `title`
HAVING count(DISTINCT `semestr`)>1
----------------------
8) SELECT `l`.`fio`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
WHERE `l`.`rank`='Доцент'
GROUP BY `l`.`id`
HAVING count(DISTINCT `d`.`title`)=3
----------------------
9) SELECT `l`.`fio`
FROM `schedule` as `sc`
JOIN `disciplines` as `d` on `sc`.`id_discipline`=`d`.`id`
JOIN `lecturers` as `l` on `l`.`id`=`sc`.`id_lector`
WHERE `l`.`rank`='Доктор Наук' AND `d`.`form`='exam' AND (`d`.`semestr`=9 OR `d`.`semestr`=10)

Сильно не тестил - если что бут не так - то стучись, помогу.

DTW
30.06.2008, 18:46
Помогите такая проблема
что при таком запросе он достает многа одинаковых фотах

в чем может быть ошибка ?

SELECT jos_vm_product.product_thumb_image FROM jos_vm_product,jos_vm_product_category_xref where category_id

Мне надо выбрать с Бд таблицы

jos_vm_product,jos_vm_product_category_xref
Это таблицы компонент джумлы virtuemart..
как бы запросом достаю все фото на продукт ток он их че выводи 5 раз одно фото однаково

$query="SELECT jos_vm_product.product_thumb_image FROM jos_vm_product,jos_vm_product_category_xref where category_id=$id ";
return $res2 = mysql_query($query);

DTW
30.06.2008, 19:05
приложение ......


http://i079.radikal.ru/0806/d7/6822546ea2b9.jpg

Naydav
30.06.2008, 19:16
Что бы не
че выводи 5 раз одно фото однаково,
а всяко-разно
обьясни какие именно поля нужно выбирать, и из каких таблиц И ПО КАКОМУ УСЛОВИЮ

Данный запрос выбирает поле product_thumb_image из таблицы jos_vm_product
по неизвестно какому условию, возможно правильно "WHERE jos_vm_product.category_id="
или так

$query="
SELECT product_thumb_image
FROM jos_vm_product
WHERE category_id IN(
SELECT id
FROM jos_vm_product_category_xref
WHERE ...
)";

Какие поля в jos_vm_product_category_xref ?

DTW
30.06.2008, 19:19
Поля такие

category_id product_id product_list
123 99 NULL


таблице jos_vm_product .поле product_thumb_image

нет category_id а есть product_id

Naydav
30.06.2008, 19:26
Попробуй так
$query="
SELECT product_thumb_image
FROM jos_vm_product
WHERE product_id IN(

SELECT product_id
FROM jos_vm_product_category_xref
WHERE category_id = $id

)";
Должно работать

пс И не забывай фильтровать $id, хотя бы так
$id = (int)$id;

DTW
30.06.2008, 19:36
Спс огромное все работает

Naydav
30.06.2008, 19:37
Спс огромное все работает
да не за что :)
И не забывай фильтровать $id, хотя бы так $id = (int)$id; или прямой вставкой (int)$id

DTW
30.06.2008, 22:23
Все поля выбирает этот запрос

а получить че их не могу

SELECT * FROM jos_vm_category ,jos_vm_category_xref
WHERE jos_vm_category.category_id
AND jos_vm_category_xref.category_child_id=jos_vm_cate gory.category_id;

поле получить не могу category_name
http://i062.radikal.ru/0806/80/24d261ae508et.jpg (http://radikal.ru/F/i062.radikal.ru/0806/80/24d261ae508e.jpg.html)

Naydav
01.07.2008, 01:03
Попробуй так, если тебе нужно только category_name

SELECT a.category_name FROM jos_vm_category as a, jos_vm_category_xref as b
WHERE a.category_id = b.category_child_id

А вообще почитай о функциях
mysql_fetch_row()
mysql_fetch_array()
mysql_fetch_object()

DTW
01.07.2008, 12:40
Не подходит
он выводит все категории
мне надо чтоб поле category_name было выведено по знач category_child_id

надо получить category_name. category_id

Таблице jos_vm_category_xref

category_parent_id category_child_id category_list

Таблице Таблица : jos_vm_category

category_id vendor_id category_name category_description --тк дл

Корвин
01.07.2008, 12:53
пропиши отдельно



WHERE jos_vm_category.category_id=jos_vm_cate gory.category_id AND jos_vm_category_xref.category_child_id=jos_vm_cate gory.category_id;




не "перовое" и "второе" равно "третьему",

а "первое" равно "третьему" и "второе" равно "третьему"

DTW
02.07.2008, 12:14
Не помогает все равно выводит парент ид
мне надо ток чилд иди

.................................................. ................................................
Таблица : jos_vm_category_xref
поля category_parent_id category_child_id category_list
.................................................. ...........................................
category_id vendor_id category_name
.................................................. ..........................................

.

SELECT category_name, category_id
FROM jos_vm_category
WHERE category_id
IN (

SELECT category_parent_id
FROM jos_vm_category_xref
WHERE category_parent_id
)
Это запрос все работает правельно

при построение структура така

CREATE TABLE IF NOT EXISTS `jos_vm_category` (
`category_id` int(11) NOT NULL auto_increment,
`vendor_id` int(11) NOT NULL default '0',
`category_name` varchar(128) NOT NULL default '',
`category_description` text,
`category_thumb_image` varchar(255) default NULL,
`category_full_image` varchar(255) default NULL,
`category_publish` char(1) default NULL,
`cdate` int(11) default NULL,
`mdate` int(11) default NULL,
`category_browsepage` varchar(255) NOT NULL default 'browse_1',
`products_per_row` tinyint(2) NOT NULL default '1',
`category_flypage` varchar(255) default NULL,
`list_order` int(11) default NULL,
PRIMARY KEY (`category_id`),
KEY `idx_category_vendor_id` (`vendor_id`),
KEY `idx_category_name` (`category_name`)
) TYPE=MyISAM COMMENT='Product Categories are stored here';


CREATE TABLE IF NOT EXISTS `jos_vm_category_xref` (
`category_parent_id` int(11) NOT NULL default '0',
`category_child_id` int(11) NOT NULL default '0',
`category_list` int(11) default NULL,
KEY `category_xref_category_parent_id` (`category_parent_id`),
KEY `category_xref_category_child_id` (`category_child_id`),
KEY `idx_category_xref_category_list` (`category_list`)
) TYPE=MyISAM COMMENT='Category child-parent relation list';
Как мне добраться Суб меню (category_child_id)?

Naydav
02.07.2008, 18:09
Допустим есть 2 таблицы с такими полями
1: user_id | name
2: id | user_id | news_id

Вопрос:

Можно ли одним запросом вставить данные из первой таблица во второю, что бы tbl1.user_id попал в tbl2. user_id, а tbl2.news_id было постоянным числом, мною заданным ?

Пример

tb1:

user_id | name
45 | name1
46 | name2
47 | name3

tb2: - допустим пустая, после запроса должна выглядеть так:
id | user_id | news_id
1 | 45 | "значение"
2 | 46 | "значение"
3 | 47 | "значение"

где "значение" - число, которое я укажу
блин вроде все просто... но что-то я втыкаю :)

geezer.code
02.07.2008, 18:21
читай мануал по "select into"

Naydav
02.07.2008, 18:23
читай мануал по "select into"
гениальный ответ, так можно и на все вопросы отвечать

geezer.code
02.07.2008, 18:29
гениальный ответ, так можно и на все вопросы отвечать
мля ступил ... тебе надо в уже существующую таблу.
тогда так.
insert into tb2( user_id, news_id) values (select user_id, 'значение' from tb1)
вроде так.

Naydav
02.07.2008, 18:37
insert into tb2( user_id, news_id) values (select user_id from tb1)
Так нельзя, я тоже так хотел

нужно , что-то типа
SELECT id INTO edu_newsletter_user.user_id FROM edu_user;

geezer.code
02.07.2008, 18:39
Так нельзя
подзапрос select user_id from tb1 - возвращает все значение(не одно), а при таком запросе
подзапрос должен возвращть одно
уху сам пошел почитал маны values писать не надо

insert into tb2( user_id, news_id) (select user_id, 'значение' from tb1)

Naydav
02.07.2008, 18:42
значение - это постоянное число, береться не из базы
В том, то и проблема

ща попробую
SELECT id INTO edu_newsletter_user.user_id FROM edu_user;

geezer.code
02.07.2008, 18:48
отстранимся от случая и подумаем.
если нужно выбрать постоянное число 5
будет запрос
select 5;
если надо назвать столбец по другому
будет select 5 as columnname;

вернемся к нашему случаю
insert into tb2(user_id, news_id) (select user_id, 5 as news_id from tb1);

Naydav
02.07.2008, 18:52
отстранимся от случая и подумаем.
если нужно выбрать постоянное число 5
будет запрос
select 5;

блин точно...
Ответ
insert into tb2(user_id, news_id) (select user_id, 5 from tb1);

geezer.code, спасибо!

Naydav
02.07.2008, 19:32
В продолжении темы:

Нужен, подзапрос типа:


SELECT *, "значение из другой таблицы, на основе текущего id"
FROM `edu_user`


Поясняю

Нужно выбрать все поля из таблицы edu_user (все записи), + значение `newsletter_id` из таблицы edu_newsletter_user, где edu_user.id = edu_newsletter_user.user_id

т.е резвлт должен быть например таким

id - 5
name - login
newsletter - 56(это значение взято из таблицы edu_newsletter_user)


Что бы было более ясно, вот неправильный запрос, но по нему можно понять, что нужно выбрать

SELECT *, `newsletter_id` AS ( SELECT `newsletter_id` FROM edu_newsletter_user WHERE user_id = 'текущий id' )
FROM `edu_user`

geezer.code
02.07.2008, 21:39
В продолжении темы:

Нужно выбрать все поля из таблицы edu_user (все записи), + значение `newsletter_id` из таблицы edu_newsletter_user, где edu_user.id = edu_newsletter_user.user_id


select id,name,newsletter from edu_user, edu_newsletter_user where edu_user.id = edu_newsletter_user.user_id;

Naydav
02.07.2008, 22:11
select id,name,newsletter from edu_user, edu_newsletter_user where edu_user.id = edu_newsletter_user.user_id;

Нам нужно выбрать не юзера у которого
edu_user.id = edu_newsletter_user.user_id
А всех юзеров со всеми полями + значение из другой таблицы...

пример

edu_user:
id | name |
45 | name1
46 | name2
47 | name3

edu_newsletter_user:
id | user_id |newsletter_value
75 | 45 | 1
76 | 46 | 2
77 | 47 | 3

Результат выбора:

id - 45
name - name1
newsletter_value - 1 (взято из таблицы edu_newsletter_user, по user_id)

id - 46
name - name2
newsletter_value - 2 (взято из таблицы edu_newsletter_user, по user_id)

id - 47
name - name2
newsletter_value - 3 (взято из таблицы edu_newsletter_user, по user_id)

Scipio
02.07.2008, 22:34
select edu_user.id,edu_user.name,edu_newsletter_user.news letter_value from edu_user inner join edu_newsletter_user on edu_user.id=edu_newsletter_user.user_id
попробуй так

Naydav
02.07.2008, 22:55
Scipio
попробуй так
Спасибо, этот метод подходит

пс
Уже месяца 4 обешаю разобраться с объеденением таблиц :)
На выходных буду читать !!!

VDShark
03.07.2008, 00:26
пс
Уже месяца 4 обешаю разобраться с объеденением таблиц :)
На выходных буду читать !!!

В статьях посмотри - я недавно статью на эту тему писал... с понятными примерами.

Naydav
03.07.2008, 01:00
В статьях посмотри - я недавно статью на эту тему писал... с понятными примерами.
Обязательно! чем больше источников - тем лучше
спасибо

Ershik
03.07.2008, 06:03
Я скачал базу данных на mysql и установил на свой, домашний компьютер. База ipb форума.
Я выяснил, что при восстановлении база данных, происходит кракозябра. Восстановление происходит успешно, но русские буквы преобразовываются.
Что нужно подправить в ASP Linux 11.2, чтобы база данных успешно импотировалась, без всякизх кракозябр?

Стандартная кодировка в mysql
default-character-set latin1
Как ее можно изменить?

Scipio
03.07.2008, 06:34
незнаю правильно ли я тебя понял, просто попробуй в самом начале дампа напиши:
set names нужная кодировка

Ershik
03.07.2008, 06:56
Я это пробовал. Не получилось.
Я хочу поменять кодировку latin1, которая по умолчанию в Linux на cp1251
База весит 600 мегабайт, извините, никакого желания восстанавливать в 4 раз у меня желания нет :)

Scipio
03.07.2008, 07:14
ндя...
ну тогда когда появится желание попробуй сделать так:
найди файленг my.cnf
в секцию [client] допиши или измени:
default-character-set = cp1251
character-sets-dir = здесь полный путь к кодировкам

на денвере это так:
[client]
port = 3306
socket = /tmp/mysql5.sock
default-character-set = cp1251
character-sets-dir = /usr/local/mysql5/share/charsets
потом в секции [mysqld] допиши или исправь:
default-character-set = cp1251
init-connect = "set names cp1251"
в секции [mysql] допиши или исправь:
default-character-set=cp1251

надеюсь поможет

Ershik
03.07.2008, 07:35
Я сделал, как вы наисали. Сейчас восстанавливаю базу снова.
Через rst.php видно, что кодировка встала нормальная. Логический предполагаю, что через браузер тоже все корректно отображается.
Спасибо :)

Naydav
03.07.2008, 17:34
Допустим есть таблица

user:

id | name
56 | name1
57 | name2
58 | name3


и user_news

id | user_id | news_id
1 | 57 | 4
3 | 57 | 5
4 | 58 | 1


и установленна переменная
$news_id = 4;

Нужно выбрать все строки в user, что бы результат был таким


id - 56
name - name1
in_news - 0

id - 57
name - name1
in_news - 1

id - 58
name - name1
in_news - 0


Где in_news - береться из таблицы user_news ( оно равно 1, если в таблице есть запись с user_id равное user.id, и запись news_id = $news_id ( в нашем случае 4)

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

DTW
03.07.2008, 22:20
Как сделать из двух запросов один запрос

сделать в одном запросе


SELECT product_thumb_image , product_sku
FROM jos_vm_product
WHERE product_id IN(

SELECT product_id
FROM jos_vm_product_category_xref
WHERE category_id )

и

SELECT product_price
FROM jos_vm_product_price
WHERE product_id IN(

SELECT product_id
FROM jos_vm_product_category_xref
WHERE category_id )

ZneP
07.07.2008, 13:53
Как должен выглядить запрос нескольких функций Sum из нескольких таблиц (по одной функции Sum из каждой таблицы)?

ch[@]ch
10.07.2008, 02:19
короче у меня проблема....
с сайта исчезла статья...я в бд нашел ее...но не могу восстоновить..как это можно сделать? помогите пожауйста....

-=Static=-
10.07.2008, 03:51
ch']короче у меня проблема....
с сайта исчезла статья...я в бд нашел ее...но не могу восстоновить..как это можно сделать? помогите пожауйста....

Вариантов много. Смотря что произошло, в результате чего она перестала выводиться... Какой движок? Есть ли понятие активна/неактивна??

ch[@]ch
10.07.2008, 11:57
Вариантов много. Смотря что произошло, в результате чего она перестала выводиться... Какой движок? Есть ли понятие активна/неактивна??
сайт написан в ручную умелыми руками =) исчез по непонятным причинам....активн\неактив это где и к чему относится? если в инете есть статья по этому вопросу,дайте ссылку,а то гугл ничо не дал мне...
или если есть хорошие ребята,напиши в аську объясните что да как,буду очень благодарен )

.Slip
10.07.2008, 12:02
>> если в инете есть статья по этому вопросу,дайте ссылку,а то гугл ничо не дал мне...
Ога, статья по исчезновению статей. Мб структуру бд опишешь? Приведёшь код выборки статей? Или мы должны так угадать что не так?

ch[@]ch
10.07.2008, 12:04
>> если в инете есть статья по этому вопросу,дайте ссылку,а то гугл ничо не дал мне...
Ога, статья по исчезновению статей. Мб структуру бд опишешь? Приведёшь код выборки статей? Или мы должны так угадать что не так?
скажи че откуда взять я тебе дам ))) я не понимаю его ты хочешь )))

.Slip
10.07.2008, 12:16
Омфнг.
1. Дай исходный код того скрипта который выдаёт статьи. Никуда не заливай, просто в тег
2. Напиши название таблицы с новостями, название колонок в таблице.

ch[@]ch
12.07.2008, 02:17
Омфнг.
1. Дай исходный код того скрипта который выдаёт статьи. Никуда не заливай, просто в тег
2. Напиши название таблицы с новостями, название колонок в таблице.
тот вопрос уладил уже ))) понял че да как...

у меня опять проблема...
при создании таблицы выводит ошибку
#1068 - Multiple primary key defined


вот запрос
SQL-запрос: CREATE TABLE `wwwpgnorhayerru`.`ribbon_art` ( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `add_datetime` DATETIME NULL DEFAULT NULL , `title` VARCHAR( 255 ) CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `mini_content` TINYTEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `content` TEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `images` TEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `comments` ENUM( 'on', 'off' ) CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT 'off', `sid` INT( 11 ) NULL DEFAULT '0', PRIMARY KEY ( `add_datetime` , `title` , `mini_content` , `comments` ) , FULLTEXT ( `title` , `mini_content` , `content` , `images` ) ) ENGINE = MYISAM CHARACTER SET cp1251 COLLATE cp1251_general_ci Ответ MySQL: #1068 - Multiple primary key defined

Lesnoy_chelovek
12.07.2008, 09:38
ch[@]ch, почитай по оформлению кода и синтаксис.
CREATE TABLE `wwwpgnorhayerru`.`ribbon_art`
( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`add_datetime` DATETIME NULL DEFAULT NULL ,
`title` VARCHAR( 255 ) NULL DEFAULT NULL ,
`mini_content` TINYTEXT NULL DEFAULT NULL ,
`content` TEXT NULL DEFAULT NULL ,
`images` TEXT NULL DEFAULT NULL ,
`comments` ENUM( 'on', 'off' ) NULL DEFAULT 'off',
`sid` INT( 11 ) NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `add_datetime` (`add_datetime` ),
KEY `title` (`title`),
KEY `mini_content` (`mini_content`),
KEY `comments` (`comments`)
)
ENGINE = MYISAM CHARACTER=cp1251

krypt3r
14.07.2008, 06:55
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
...
PRIMARY KEY (`id`),

К чему объявление первичного ключа дважды?

DaemonicSoul
16.07.2008, 12:40
Такой вопрос: Имеется таблица, в ней несколько полей. Первое поле имеет значения Фамилия И.О.
Поле name:
Иванов И.И.
Петров О.О
Петров Л.П.

Как выделить из этой таблицы всех людей с фамилией Петров?
SELECT * FROM table WHERE name='Петров /*а тут какая - либо фича, что И.О. могут быть любыми*/'. Оо
Как сделать

DIAgen
16.07.2008, 12:48
Такой вопрос: Имеется таблица, в ней несколько полей. Первое поле имеет значения Фамилия И.О.
Поле name:
Иванов И.И.
Петров О.О
Петров Л.П.

Как выделить из этой таблицы всех людей с фамилией Петров?
SELECT * FROM table WHERE name='Петров /*а тут какая - либо фича, что И.О. могут быть любыми*/'. Оо
Как сделать

SELECT * FROM table WHERE name like '%Петров'

krypt3r
16.07.2008, 13:33
Более правильно

SELECT * FROM table WHERE name like '%Петров%'

guest3297
16.07.2008, 17:14
Короче надо следущее

mysql 4.1

1) есть колонка с годом надо что бы год был > 2008 (year)
2) есть int колонка надо что бы она не была пустая (col1)
3) есть int колонка надо что бы все значения которые начинаются на 6 не селектились (col2).

Допустим так

SELECT * FROM `tbl` where `year` > 2008 AND `col1` IS NOT NULL AND col2 ....

Вот тут зарутрудняюсь и как делать правильно IS NOT?

Спасибо.

krypt3r
17.07.2008, 07:50
SELECT * FROM `tbl` where
`year` > 2008 AND
`col1` IS NOT NULL AND
`col2` NOT LIKE '6%'

Если в поле col1 содержатся записи, содержажие 0, то они попадут в результат запроса. Указанный запрос сработает только для NULL-записей. Если не нужны ни NULL, ни 0, то сделать, как указал Nomer1

...`col1` != ''...

или

...`col1` != 0...

ЗЫ. Несмотря на то, что col2 - целочисленное, NOT LIKE для него сработает в мускуле корректно.

XopoIII
18.07.2008, 08:35
можно ли сделать дамп бд с хоста на который пробиться не могу, зная хост-пасс-пользователя-имя бд?

m0nsieur
18.07.2008, 09:39
Если удаленно сможешь подсоединиться к БД и через консоль сделать дамп.

VDShark
18.07.2008, 14:49
ch']тот вопрос уладил уже ))) понял че да как...

у меня опять проблема...
при создании таблицы выводит ошибку
#1068 - Multiple primary key defined


вот запрос
SQL-запрос: CREATE TABLE `wwwpgnorhayerru`.`ribbon_art` ( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `add_datetime` DATETIME NULL DEFAULT NULL , `title` VARCHAR( 255 ) CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `mini_content` TINYTEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `content` TEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `images` TEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL , `comments` ENUM( 'on', 'off' ) CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT 'off', `sid` INT( 11 ) NULL DEFAULT '0', PRIMARY KEY ( `add_datetime` , `title` , `mini_content` , `comments` ) , FULLTEXT ( `title` , `mini_content` , `content` , `images` ) ) ENGINE = MYISAM CHARACTER SET cp1251 COLLATE cp1251_general_ci Ответ MySQL: #1068 - Multiple primary key defined

Примари объявлен два раза - чего быть не может. Если же ты хочешь сделать составной, то убери локальные описания первичного ключа, и напиши
PRIMARY KEY (`field1`,`field2`...)
Т.е. те поля через запятую, которые должны участвовать в составном ключе.

VDShark
18.07.2008, 14:52
Более правильно

SELECT * FROM table WHERE name like '%Петров%'

Тогда уж

like 'Петров %'

1) Ибо вдруг секретарша или кто то забил не инициалы ,а полностью? Тогда тебе и Петровичей выведет, и еще всякую нечисть)
2) И думаю необходим пробел как разделитель, ибо Петровенко и еще кто нить быть могут :)

Onix
19.07.2008, 16:06
Помогоите plz с запросом в mysql5.

Есть 2 сайта mysite и old.mysite. Обои два на DataLife.

Задача - перенести все посты(хотябы только их) со старого(old.mysite) на новый(mysite), заменив при этом все id сообщений в старой базе (там идёт 4-280) так, что бы id начинались с 316 и автоматом проставились +1 до последнего.

Пока запрос составить не получается :(

DTW
20.07.2008, 09:32
SELECT jos_vm_product.product_thumb_image , jos_vm_product.product_sku ,
jos_vm_product.product_sku ,
jos_vm_product_category_xref.product_id, jos_vm_product_category_xref.category_id
,jos_vm_product_price.product_price,jos_vm_product _price.product_price_id ,
jos_vm_category.category_name
FROM jos_vm_product,jos_vm_product_category_xref,jos_vm _product_price,
jos_vm_category

WHERE jos_vm_product.product_id=jos_vm_product_category_ xref.product_id and
jos_vm_product_price.product_id=jos_vm_product_cat egory_xref.product_id
and jos_vm_category.category_id= jos_vm_product_category_xref.category_id
and jos_vm_product_category_xref.category_id

При помощи этого запроса можна получить файл
с описанием


ATV 220||2754.05||http://text/index.php?page=shop.product_details&flypage=shop.flypage&product_id=30&category_id=125||9bb245c8c8c4f64f801b4182839279bd. jpg||kvadracikli

Как выдернуть из БД парент категорию

что было так || Moto||kvadracikli

таблица имеет такие поля

category_parent_id , category_child_id ,category_list

FIND_ERROR
20.07.2008, 09:59
в old.site

$table='таблица с пользователями';
for ($i < $z)
{
mysql_query ("SELECT * FROM $table WHERE index_id=$i");
$n=$i+316;
mysql_query ("UPDATE $table SET id=$n WHERE id=$i");
}

это должно увеличить все id на 316
а дальше переносим все записи из старой таблицы в новую...

Onix
20.07.2008, 16:54
в old.site

$table='таблица с пользователями';
for ($i < $z)
{
mysql_query ("SELECT * FROM $table WHERE index_id=$i");
$n=$i+316;
mysql_query ("UPDATE $table SET id=$n WHERE id=$i");
}

это должно увеличить все id на 316
а дальше переносим все записи из старой таблицы в новую...

Пробовал по всякому, но:

#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 '($i < $z)
{

А почему таблица пользователей, ведь менять надо id постов?

DTW
20.07.2008, 16:55
Так получаю цену

SELECT
jos_vm_product_price.product_price

FROM jos_vm_product,jos_vm_product_category_xref,jos_vm _product_price

WHERE
jos_vm_product_price.product_id=jos_vm_product_cat egory_xref.product_id
and jos_vm_product_category_xref.category_id=124

limit 15

вопрос как сделать UPDATE jos_vm_product_price.product_price

не как не получается ..

если делаю так
UPDATE jos_vm_product_price set jos_vm_product_price.product_price
WHERE
jos_vm_product_price.product_id=jos_vm_product_cat egory_xref.product_id
and jos_vm_product_category_xref.category_id=124

То он пишет что неизвестна таблица
jos_vm_product_category_xref

решение такое

UPDATE jos_vm_product_price, jos_vm_product_category_xref set jos_vm_product_price.product_price=10
WHERE
jos_vm_product_price.product_id=jos_vm_product_cat egory_xref.product_id
and jos_vm_product_category_xref.category_id=124

Спс за помощь @Egorich

FIND_ERROR
20.07.2008, 20:14
Onix
сори ет просто скрипт которым я сменил у юзерей одного форума ID на рандом ) таблица та в котоой надо сменить id
предворительно надо установить конект с базой данных
($i < $z) замени на ($i > $z)
$i задать значенние = максимального поста
$z задать значение 1

<?php
$host='localhost';
$login='root';
$pass='';
$conect_link = mysql_connect($host, $login, $pass);
mysql_connect($host, $login, $pass);
mysql_select_db ('старая база');
$i=1234;
$z=1;
$table='таблица с пользователями';
for ($i > $z)
{
mysql_query ("SELECT * FROM $table WHERE index_id=$i");
$n=$i+316;
mysql_query ("UPDATE $table SET id=$n WHERE id=$i");
$i=$i-1;
}
?>

Onix
21.07.2008, 11:29
результат тот же:

Parse error: syntax error, unexpected ')', expecting ';' in /home/cstrike.net/old/temp.php on line 11

line 11 - for ($i > $z);

.Slip
21.07.2008, 12:10
FIND_ERROR, ты откуда копипастил? Пиздец=\
Или лыжи не едут или я ебанутый (с)
Расскажешь что за хакерский код?
$conect_link = mysql_connect($host, $login, $pass);
mysql_connect($host, $login, $pass);

Насколько я полнял смысл скрипта то нужен while а не for =\ Кстате, тебе никто не рассказывал о таких штуках как инкремент/декремент?
$i=$i-1;
=\\

Если уж так хочется скриптом, то вот:
<?php
mysql_connect('host', 'user', 'pass');
$id = 316, $z = 4;
while ($z <= 280)
{
mysql_query ("UPDATE таблица SET id=$id WHERE id=$z");
$id++, $z++;
}
?>
Не проверял, негде ибо. Попробуй, напиши потом.

krypt3r
21.07.2008, 12:14
FIND_ERROR
Это че за ужас в пхп-кодинге? Как насчет mysql_fetch_array и while?

FIND_ERROR
21.07.2008, 14:03
намудрил согласен, а в данном случее не правильнм ли будет использовать инкримент?
так как если в таблице больше 316 записей первая же опирация попытаеться создать дублирушиеся Id, разумнее будет делать обновление с конца... или я опять неправ :( ?

Onix
21.07.2008, 14:37
Parse error: syntax error, unexpected ',' in /home/cstrike.net/old/temp.php on line 3

line 3 - $id = 316, $z = 4;

krypt3r
21.07.2008, 14:55
Оникс, ну замени запятую на точку с запятой

Onix
21.07.2008, 15:14
Оникс, ну замени запятую на точку с запятой

В обоих строках менял, скрипт молча проходит, но ничего не меняет :(

FIND_ERROR
21.07.2008, 17:05
мож так проканает %) ?

<?php
mysql_connect('host', 'user', 'pass');
$z = 4; // число постов
$id = $z+316;
while ($z <> 1)
{
mysql_query ("UPDATE таблица SET id=$id WHERE id=$z");
$id--;
$z--;
}
?>

.Slip
21.07.2008, 17:16
Parse error: syntax error, unexpected ',' in /home/cstrike.net/old/temp.php on line 3

line 3 - $id = 316, $z = 4;
Хм, не знал что в пхп так нельзя делать. Убого=\
Onix, в моём скрипте надо указать сразу и базу данных. Т.е. UPDATE BASE_NAME.TABLE ...

Onix
21.07.2008, 17:26
Хм, не знал что в пхп так нельзя делать. Убого=\
Onix, в моём скрипте надо указать сразу и базу данных. Т.е. UPDATE BASE_NAME.TABLE ...

Точно, я пропустил база.таблица, просто указал таблицу. Теперь всё готово. Спасибо! :)

Onix
22.07.2008, 15:04
Извиняюсь за наглость, а можно вместе со всеми постами перенести связанные комментарии?

still12
31.07.2008, 12:19
Только начал изучать SQL .. Встала необходимость ввывести данные из базы (MySQL) в php скрипт...Написал самый простейший по итогу на экране лишь появляется надпись мои френды ...где ошибка ? В базе данные есть точно ..
<?php
error_reporting(0);
$bd=mysql_connect("localhost", "root","", "test12");

$query = "select * from friends ";
$result= mysql_query ($bd, $query);

echo "Мои френды: <br>";
while ($row = mysql_fetch_array($result)) {
echo $row["friend_name"] . ". <br>";
}
mysql_close($bd);

?>

5triker
31.07.2008, 12:22
не выбрана база

<?php
error_reporting(0);
$bd=mysql_connect("localhost", "root","");
mysql_select_db("test12");

$query = "select * from friends ";
$result= mysql_query ($bd, $query);

echo "Мои френды: <br>";
while ($row = mysql_fetch_array($result)) {
echo $row["friend_name"] . ". <br>";
}
mysql_close($bd);

?>

still12
31.07.2008, 12:27
Не помоголо ..тоже ...

5triker
31.07.2008, 12:31
а названия базы , таблицы , полей точно правильные ?
убери ерор репортинг 0 и посмотри какую ошибку выдаст

.Slip
31.07.2008, 12:32
В цикле while оператор присваивания? Ты ничего не перепутал?

Naydav
31.07.2008, 12:34
Не помоголо ..тоже ...


Пробуй так
<?php

$lnk = mysql_connect('localhost', 'mysql_user', 'mysql_password')
or die ('Not connected : ' . mysql_error());

// сделать foo текущей базой данных
mysql_select_db('foo', $lnk) or die ('Can\'t use foo : ' . mysql_error());

?>

still12
31.07.2008, 12:34
а названия базы , таблицы , полей точно правильные ?
убери ерор репортинг 0 и посмотри какую ошибку выдаст
Поля и название таблицы точно правильное..

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in r:\home\localhost\www\10\test12.php on line 6
Мои френды:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in r:\home\localhost\www\10\test12.php on line 9

5triker
31.07.2008, 12:35
В цикле while оператор присваивания? Ты ничего не перепутал?


не , там все правильно

mff
31.07.2008, 12:37
Ясен красен, пароль вбей для коннекта с базой

Naydav
31.07.2008, 12:37
А понятно
$result= mysql_query ($bd, $query);
НУЖНО
$result= mysql_query ($query, $bd);

resource mysql_query ( string query [, resource link_identifier] )
а у тебя наоборот :)

still12
31.07.2008, 12:40
Ясен красен, пароль вбей для коннекта с базой
ПОЛЬЗОВАТЕЛЬ ROOT по умолчанию ..и идет без паса ...так что она там не нужен ...и если бы небыло коннекта с базой выдалась бы соответствующая ошибка ....

5triker
31.07.2008, 12:40
да и вопще нах там $bd не нужен
просто $result= mysql_query ($query); юзай

still12
31.07.2008, 12:41
А понятно
$result= mysql_query ($bd, $query);
НУЖНО
$result= mysql_query ($query, $bd);

resource mysql_query ( string query [, resource link_identifier] )
а у тебя наоборот :)


Ага ...спс ...все заработало ))с мну +

still12
31.07.2008, 13:02
Неполучается добавить данные формы в базу ...
для этого создал html файл
<html>
<head>
<title>Добовление друга</title>
</head>
<body>
<form aсtion="test11.php" method="get">
<table>
<tr><td>Друг<td><input name=link maxlength=30 size=30>


<tr><td colspan=2><input type=submit value="Ввод">
</table>
</form>
</body>
</html>
И затем создал скрипт с именем test11.php
<?php
$bd=mysql_connect("localhost", "root","");
mysql_select_db("test12");

$link3=$_GET["link"]

$query = "insert into friends values ("$link3") ";
$result= mysql_query ($query, $bd);


mysql_close($bd);

?>...Но что то как то ничего не добавляется ...)))))Знаю что ступил ..помогите плз

5triker
31.07.2008, 13:08
склеивать нада точками
$query = "insert into friends values (".$link3.") ";

и если у тебя в таблице не 1 поле делай так
$query = "insert into friends ('поле в таблице') values (".$link3.") ";

still12
31.07.2008, 13:14
склеивать нада точками
$query = "insert into friends values (".$link3.") ";

и если у тебя в таблице не 1 поле делай так
$query = "insert into friends ('поле в таблице') values (".$link3.") ";
Сейчас вот такая ошибка Parse error: parse error, unexpected T_VARIABLE in r:\home\localhost\www\10\test11.php on line 5

5triker
31.07.2008, 13:18
$link3=$_GET["link"]

тут ; поставь в конце

still12
31.07.2008, 13:33
Ага ...но терь еще интереснее ...при открытии самого файла test11.php выдается ошибка

Notice: Undefined index: link in r:\home\localhost\www\10\test11.php on line 4
[Денвер: показать возможную причину ошибки]
но по итогу в базу вносится точка .... а при потытки добвавления из формы не ч не дабовляется ....( но в адресной страке как поkоженно /test.html?link=test

5triker
31.07.2008, 13:42
test.html?link=test

still12
31.07.2008, 14:02
test.html?link=testНе понял ...я поменял расширение файла с формой на php но это не че не дало .... ну что скажите т ?

Naydav
31.07.2008, 14:09
запрос должен быть вида test.php?link=значение
и какого х у тебя action="test11.php", а не action="test.php"

сделай
echo $query;
перед
$result= mysql_query ($query, $bd);
и посмотри результат
и вообще поставь ПМА

Слушай знаешь такую книгу -
Котеров
Самоучитель php, там как раз с этого и начинается...
Не нужно лениться, прочитать 20 страничек, и тебе все станет понятно

still12
31.07.2008, 14:17
и вообще поставь ПМА
Что такое ПМА :confused:

5triker
31.07.2008, 14:20
ПУСКАТЕЛИ ЭЛЕКТРОМАГНИТНЫЕ ПМА-3000
ТУ 16-644.005-84

НАЗНАЧЕНИЕ: Пускатели серии ПМА-3000 предназначены для применения в стационарных установках для дистанционного пуска непосредственным подключением к сети, остановки и реверсирования трехфазных асинхронных электродвигателей с короткозамкнутым ротором переменного тока частоты 50 и 60Гц; в исполнении с тепловым реле – для защиты управляемых электродвигателей от перегрузок недопустимой продолжительности.

Номинальное напряжение, В 660
Номинальный ток главной цепи при напряжении 380/660 В, 40/16
Номинальное напряжение втягивающей катушки, В 24...660
Износостойкость для классов А/Б/В:
механическая, млн. циклов ВО, не менее 16/16/8
коммутационная, млн. циклов ВО, не менее 2/1/0,3
Мощность, потребляемая катушкой включения/удержания, ВА 200/25
Частота включений в час без нагрузки/с нагрузкой 3600/1200

СТРУКТУРА УСЛОВНОГО ОБОЗНАЧЕНИЯ



ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
Обозначение пускателя Исполнение по количеству Габаритные размеры LxBxH, мм
ПМА 3100 IP00 1з, 1з+1р 93х89х116
ПМА 3200 IP00 1з, 1з+1р 150х89х116
ПМА 3110 IP40 1з, 1з+1р 210х142х152
ПМА 3210 IP40 1з, 1з+1р 285х155х152
ПМА 3300 IP00 2з+2р, 4з+4р 130х200х130
ПМА 3400 IP00 2з+2р, 4з+4р 156х200х130
ПМА 3310, ПМА 3410 IP40 2з+2р, 4з+4р 275х255х15
ПМА 3500 IP00 2з+2р, 4з+4р 130х200х155
ПМА 3600 IP00 2з+2р, 4з+4р 156х200х155




ГАБАРИТНЫЕ И УСТАНОВОЧНЫЕ РАЗМЕРЫ

ПМА 3100, ПМА3200Тип пускателя Размеры, не более, мм Масса, не более, кг
L L1 B
ПМА-3100 - 93 89 1,11
ПМА-3200 150 - 1,3




ПМА3300, ПМА3400, ПМА3500, ПМА3600Тип пускателя Размеры, не более, мм Масса, не более, кг
L L1 H H1
ПМА-3300 - 130 130 12 2,95
ПМА-3400 156 - 3,1
ПМА-3500 - 130 155 36 3,25
ПМА-3600 156 - 3,4




ПМА3110, ПМА3210, ПМА3310, ПМА3410Тип пускателя Размеры, не более, мм Масса, не более, кг
A A1 A2 B L H H1
ПМА-3110 75± 132±0,5 47±1 142 200 152 39±2 1,9
ПМА-3210 90±0,5 201±0,5 53±1 155 273 2,2
ПМА-3310 156±0,5 186±0,5 70±1 255 263 152 34±2 4,28
ПМА-3410 4,7

still12
31.07.2008, 14:26
ПУСКАТЕЛИ ЭЛЕКТРОМАГНИТНЫЕ ПМА-3000
ТУ 16-644.005-84

НАЗНАЧЕНИЕ: Пускатели серии ПМА-3000 предназначены для применения в стационарных установках для дистанционного пуска непосредственным подключением к сети, остановки и реверсирования трехфазных асинхронных электродвигателей с короткозамкнутым ротором переменного тока частоты 50 и 60Гц; в исполнении с тепловым реле – для защиты управляемых электродвигателей от перегрузок недопустимой продолжительности.

Номинальное напряжение, В 660
Номинальный ток главной цепи при напряжении 380/660 В, 40/16
Номинальное напряжение втягивающей катушки, В 24...660
Износостойкость для классов А/Б/В:
механическая, млн. циклов ВО, не менее 16/16/8
коммутационная, млн. циклов ВО, не менее 2/1/0,3
Мощность, потребляемая катушкой включения/удержания, ВА 200/25
Частота включений в час без нагрузки/с нагрузкой 3600/1200

СТРУКТУРА УСЛОВНОГО ОБОЗНАЧЕНИЯ



ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
Обозначение пускателя Исполнение по количеству Габаритные размеры LxBxH, мм
ПМА 3100 IP00 1з, 1з+1р 93х89х116
ПМА 3200 IP00 1з, 1з+1р 150х89х116
ПМА 3110 IP40 1з, 1з+1р 210х142х152
ПМА 3210 IP40 1з, 1з+1р 285х155х152
ПМА 3300 IP00 2з+2р, 4з+4р 130х200х130
ПМА 3400 IP00 2з+2р, 4з+4р 156х200х130
ПМА 3310, ПМА 3410 IP40 2з+2р, 4з+4р 275х255х15
ПМА 3500 IP00 2з+2р, 4з+4р 130х200х155
ПМА 3600 IP00 2з+2р, 4з+4р 156х200х155




ГАБАРИТНЫЕ И УСТАНОВОЧНЫЕ РАЗМЕРЫ

ПМА 3100, ПМА3200Тип пускателя Размеры, не более, мм Масса, не более, кг
L L1 B
ПМА-3100 - 93 89 1,11
ПМА-3200 150 - 1,3




ПМА3300, ПМА3400, ПМА3500, ПМА3600Тип пускателя Размеры, не более, мм Масса, не более, кг
L L1 H H1
ПМА-3300 - 130 130 12 2,95
ПМА-3400 156 - 3,1
ПМА-3500 - 130 155 36 3,25
ПМА-3600 156 - 3,4




ПМА3110, ПМА3210, ПМА3310, ПМА3410Тип пускателя Размеры, не более, мм Масса, не более, кг
A A1 A2 B L H H1
ПМА-3110 75± 132±0,5 47±1 142 200 152 39±2 1,9
ПМА-3210 90±0,5 201±0,5 53±1 155 273 2,2
ПМА-3310 156±0,5 186±0,5 70±1 255 263 152 34±2 4,28
ПМА-3410 4,7Исчерпывающий ответ ...... :D

Naydav
31.07.2008, 14:28
Что такое ПМА :confused:
phpmyadmin

и про книгу не забудь

still12
31.07.2008, 14:39
phpmyadmin

и про книгу не забудь
Эт т все есть ..я просто до этого сайты только на CMS делал ...так что с кодом практически не общался ...а книжку прочту ...спс)

ZEXEL
31.07.2008, 19:57
Подскажите пожалуйста как такое зделать :
Есть БД под названием zexel, и есть таблица user - а тут поля : id, icq , email

Подскажите как подключится таблице через php и вывести id № 1,2 ?

DTW
31.07.2008, 20:16
<?php
define(DB,"localhost");
define(DU,"login");
define(DP,"pass");
define(DBN,"zexel");
$connect = @mysql_connect(DB,DU,DP) ;
if(!$connect)
{
echo "cant connect to Mysql db";
}
$q ="Select from user where id limit 2" ;
$result = mysql_query($q);
while( $result = mysql_fetch_array($q)){


$icq = $result['icq'];
$mail = $result['mail'];
print "ICQ".$icq."MaiL" .$mail;

}

?>

Select from user where id limit 2

ZEXEL
31.07.2008, 21:00
Что то не работает !
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Y:\denwer\www\denwer\aaa\index.php on line 13

5triker
31.07.2008, 21:26
так сделай , там выбора базы небыло

<?php
define(DB,"localhost");
define(DU,"login");
define(DP,"pass");
define(DBN,"zexel");
$connect = @mysql_connect(DB,DU,DP) ;
mysql_select_db(DBN);
if(!$connect)
{
echo "cant connect to Mysql db";
}
$q ="Select from user where id limit 2" ;
$result = mysql_query($q);
while( $result = mysql_fetch_array($q)){


$icq = $result['icq'];
$mail = $result['mail'];
print "ICQ".$icq."MaiL" .$mail;

}

?>

mad_xakep
03.08.2008, 18:19
скажите пожалуйста как мне ограничить вывод строк на одной странице из бд... чтоб например одна запись на страницу выводилась или 5

[Raz0r]
03.08.2008, 18:27
чтоб например одна запись на страницу выводилась
SELECT * FROM tbl LIMIT 1
или 5
SELECT * FROM tbl LIMIT 5

mad_xakep
03.08.2008, 18:30
']SELECT * FROM tbl LIMIT 1

SELECT * FROM tbl LIMIT 5
я так и сделал но чистый лист просто ниче невыдает типа ошибка

Isis
03.08.2008, 18:32
Покажи как ты делаешь

Dr.Frank
03.08.2008, 18:34
м.б. limit 0,5

а без лимита нормально выводит?

mad_xakep
03.08.2008, 18:35
SELECT * FROM $dtable LIMIT 1 ; вот этот клочок кода

mad_xakep
03.08.2008, 18:43
м.б. limit 0,5

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

mff
03.08.2008, 19:07
SELECT * FROM `$dtable` ORDER BY `id` DESC LIMIT 1, 1
попробуй так...

mad_xakep
03.08.2008, 19:15
SELECT * FROM `$dtable` ORDER BY `id` DESC LIMIT 1, 1
попробуй так...
ошибка

while(list($id, $name) = mysql_fetch_row($result)) {

SELECT * FROM `$dtable` ORDER BY `id` DESC LIMIT 1, 1;

echo "$id $name";


мож я не туда вставил этот код?

Fuckel
03.08.2008, 19:29
while(list($id, $name) = mysql_fetch_row($result)) {

SELECT * FROM `$dtable` ORDER BY `id` DESC LIMIT 1, 1;

echo "$id $name";

? это что такое? эт твой код?

mad_xakep
03.08.2008, 19:34
? это что такое? эт твой код?
канечно нет это вывод то что выше я не стал писать и выше я писал что код работает без лимита этого нормально а с лимитом непашет

mff
03.08.2008, 19:37
mad_xakep давай весь код твой посмотрим!

[Raz0r]
03.08.2008, 19:42
да зачем весь =) mad_xakep покажи лучше как у тебя без лимита работало =)

mad_xakep
03.08.2008, 19:53
']да зачем весь =) mad_xakep покажи лучше как у тебя без лимита работало =)

я стесняюсь эту туфту показывать

<? $host = "localhost";
$user_db = "kat";
$pass_db = "777";
$dbase = "kat";
$dtable = "kat";
mysql_connect ($host, $user_db, $pass_db);
mysql_select_db($dbase);
$sql = "SELECT id, name FROM $dtable";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if ((!$rows) || ($rows < 1)) {echo "Бд пуста";
}
else {
echo '<table width="830" border="1" cellspacing="1" cellpadding="0">
<tr><td width="30">ID</td>
<td width="100">Имя</td></tr>';
while(list($id, $name) = mysql_fetch_row($result)) { echo ' <tr> <td width="30">';echo "$id"; echo'</td>
<td width="100">'; echo"$name"; echo'</td>
</tr>'; }
}
print "</table>\n";
?>

Fuckel
03.08.2008, 19:57
mysql_fetch_row() выдирает одну строку пробуй mysql_fetch_array()

mad_xakep
03.08.2008, 20:05
mysql_fetch_row() выдирает одну строку пробуй mysql_fetch_array()
это я сделал а как сделать чтоб выводил либо одну запись или 5

Fuckel
03.08.2008, 20:07
если разом пять записей то должно получаться, как писали выше, с помощью Limit 5

mad_xakep
03.08.2008, 20:12
не получается

Fuckel
03.08.2008, 20:14
выкладывай код как используешь с mysql_fetch_array()

5triker
04.08.2008, 07:16
вставь в цикл , должно работать

$i++;
if ($i==5){break;} //вместо 5 нужное число

mad_xakep
04.08.2008, 10:43
вставь в цикл , должно работать

$i++;
if ($i==5){break;} //вместо 5 нужное число

вот это работает спасибочки

mff
04.08.2008, 11:08
Help! Нужет путёвый скрипт выборки из базы порциями. Внизу ссылочки 1,2,3,4... Написал своими силами, но что то мне не нравиться :( Help!

Корвин
04.08.2008, 11:18
где ссылочки?

still12
04.08.2008, 11:42
В таблице имеются следуюшие поля :
link_id- ID ссылки
link- сюда вносится ссылка введенная пользователем с формы
Так вот не скажете как сделать чтоюбы при добавлении ссылки автоматически создавался ее уникальный нормер в link_id.
Например
если ссылка была добавлена первой то id должен быть 1
если ссылка добавлена второй то id должен быть два .... и т.д.

m0nsieur
04.08.2008, 12:08
Установи полю link_id дополнительное значение auto_increment через phpmyadmin.
Примерно так можно через sql сделать:


ALTER TABLE `table` CHANGE `link_id` `link_id` INT( 11 ) NOT NULL AUTO_INCREMENT)

ALTER TABLE `table` ADD UNIQUE (`link_id`)

still12
04.08.2008, 12:45
Установи полю link_id дополнительное значение auto_increment через phpmyadmin.
Примерно так можно через sql сделать:


ALTER TABLE `table` CHANGE `link_id` `link_id` INT( 11 ) NOT NULL AUTO_INCREMENT)

ALTER TABLE `table` ADD UNIQUE (`link_id`)

Так полю значения задал но немного подругому .....но теперь при добавлении данных в базу через форму вылезает Column count doesn't match value count at row 1

m0nsieur
04.08.2008, 13:00
Теперь при добавлении надо писать в базу link_id пустым. Покажи код как добавляешь.

still12
04.08.2008, 13:06
Теперь при добавлении надо писать в базу link_id пустым. Покажи код как добавляешь.
Все спс .....работает )

still12
07.08.2008, 12:30
Есть две таблицы users и link
В таблице users поля : user_id, name, pass
В таблице link user_id, link
При регистрации пользователя ему выдается id. Ну так вот нужно чтобы при входе пользователя на сайт по ему уникальному ид из таблицы link выдавалась ссылка введенная им при регистрации .....
Я так понимаю что user_ id в первой таблице должен иметь иметь значение PR, а user_id во второй таблице FK ? Я прав ...а как это сделать задать FK?

http://cheker.site88.net/ge.bmp

m0nsieur
07.08.2008, 13:05
Ты правильно понял, создаешь в таблице users поле user_id которое будет primary key, а в таблице link поле user_id оставляешь как есть или у тебя уже все создано и проблема с запросом?

VDShark
07.08.2008, 13:37
m0nsieur думаю он разобрался как сделать первичный ключ, и его интересует как сделать внешний :) Видимо хочется человеку ссылочную целостность в БД поддерживать.
still12 внешний ключ создается след. образом:
Если у тебя уже созданыы таблицы, то соответственно нам необхоимо расширить их структуру

ALTER TABLE `link` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE

Причем если users_id является первичным ключем, то его уточнение после REFERENCES можно опустить, т.е.

REFERENCES `users`

а ON DELETE CASCADE ON UPDATE CASCADE определяют действия базы в случае удаления\обновление того элемента, на который ссылаемся (в данном случае мы выставили каскадное, т.е. если например удалится запись о юзере, то автоматически удалятся записи о его линках)

scarm
18.08.2008, 13:51
Исходная: в строке sql таблицы password(varchar(100)) введены разные типы хэшей (MD5 и MD5:соль), отличающиеся, соответственно, длиной строки и символом-разделителем :

3b8f3744bf2a000023e470318c315543
a9b8f2d3e1cb0000c031744208939aaa:8XA0DTaXVWJ73X86
d4fa96a300000f764f90a7be296e5cdb
c4f884f2aed00000740c251a973b1e96
5d7c7d6f98be78000003ae6f707ebe59:WZyGIinDH5adLQEv

Поскажите, как сформулировать правильно запрос select, чтобы выводились только md5 строки либо шла сортировка по длине строки (сначала чтобы выводились md5 а потом соленые md5).
Заранее спасибо

.:EnoT:.
18.08.2008, 16:20
scarm
Функцией LENGTH()
SELECT * FROM `table` ORDER by LENGTH(`password`)

Соответственно если нужно вывести только md5 без соли, то так
SELECT * FROM `table` WHERE LENGTH(`password`) = 32

krypt3r
19.08.2008, 07:26
Можно еще, к примеру, разделить поле password на две колонки - в первой находится хэш, во второй - соль или NULL, если хэш несоленый.

mysql> select substring_index(password, ':', 1), case when locate(':', password) > 0 then substring(password, locate(':', password)+1) else NULL end from table;

| 3b8f3744bf2a000023e470318c315543 | NULL |
| a9b8f2d3e1cb0000c031744208939aaa | 8XA0DTaXVWJ73X86 |
| d4fa96a300000f764f90a7be296e5cdb | NULL |
| c4f884f2aed00000740c251a973b1e96 | NULL |
| 5d7c7d6f98be78000003ae6f707ebe59 | WZyGIinDH5adLQEv |

T-Rey
21.08.2008, 08:27
Ребята, есть вопрос по удалению дублей в mysql.

Имеется 5 таблиц
table_1, table_2, table_3, table_4, table_5,

Дубли надо искать по первым двум совместно.

Isis
21.08.2008, 08:44
--Создание копии таблицы без дубликатов во временной таблице
CREATE TEMPORARY TABLE bad_temp AS SELECT DISTINCT * FROM contents_site;
--Удаление всех записей из старой таблицы
DELETE FROM contents_site;
--Добавление записей без дублей
INSERT INTO contents_site SELECT * FROM bad_temp;
--Удаление временной таблицы
DROP TABLE bad_temp;

Isis
21.08.2008, 09:45
http://www.mojbred.com/706.html
http://kurapov.name/article/sql_duplicates/

.:EnoT:.
23.08.2008, 21:32
Как реализовать регистрозависимый запрос?
То исть в таблице к примеру имеется логин EnoT, так вот нужно, чтобы запросы вида

SELECT .... WHERE `login` = 'enot'
SELECT .... WHERE `login` = 'ENOT'
SELECT .... WHERE `login` = 'eNoT'
и т.д. возвращали ложь, а true возвращалась только при запросе логина такого же регистра как он записан в бд.

Запрашивать сначала логин, а потом проверять условием типа if('EnoT' == 'EnoT') echo 'ok'; не выход, нужен именно один запрос к базе.

n1†R0x
23.08.2008, 22:04
Как реализовать регистрозависимый запрос?
То исть в таблице к примеру имеется логин EnoT, так вот нужно, чтобы запросы вида

и т.д. возвращали ложь, а true возвращалась только при запросе логина такого же регистра как он записан в бд.

Запрашивать сначала логин, а потом проверять условием типа if('EnoT' == 'EnoT') echo 'ok'; не выход, нужен именно один запрос к базе.
Можно использовать типы данных BLOB для вставки регистрозависимых данных... BLOB - аналог TEXT, но при сравнении строк регистр учитывается.

krypt3r
25.08.2008, 06:53
Если поле не BLOB, то

SELECT .... WHERE CAST(`login` as BINARY) = 'eNoT'

или, что то же самое

SELECT .... WHERE BINARY `login` = 'eNoT'

Ha_Vi
25.08.2008, 11:21
помогите пожалуйста, есть таблица номеров телефонов, фамилия и т.д...
выдает ошибку, как правильно будет заголовок???

CREATE TABLE PHONES (
nomer MEDIUMINT(6) default NULL,
Name varchar(60) default NULL,
street varchar(60) default NULL,
house varchar(60) default NULL,
flat varchar(60) default NULL,
) TYPE=MyISAM;

INSERT INTO PHONES values ('220000', 'ВЯЗГИН ВВ', 'ТУРГЕНЕВА', '1', '26');
INSERT INTO PHONES values ('220001', 'ДМИТРИЕВА ТМ', 'ЧУГУНОВА', '14', '6');
INSERT INTO PHONES values ('220002', 'НАЗАРКИНА ЛА', 'НАБ.1ГО МАЯ', '67', '6');
INSERT INTO PHONES values ('220022', 'ЛЕОНТЬЕВА ЛВ', 'ЖЕЛЯБОВА', '40/2', '14');




#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 ') TYPE=MyISAM' at line 7

я все эти varchar поставил правильно или где то чтото другое???

Isis
25.08.2008, 11:25
помогите пожалуйста, есть таблица номеров телефонов, фамилия и т.д...
выдает ошибку, как правильно будет заголовок???

CREATE TABLE PHONES (
nomer MEDIUMINT(6) default NULL,
Name varchar(60) default NULL,
street varchar(60) default NULL,
house varchar(60) default NULL,
flat varchar(60) default NULL,
) TYPE=MyISAM;

INSERT INTO PHONES values ('220000', 'ВЯЗГИН ВВ', 'ТУРГЕНЕВА', '1', '26');
INSERT INTO PHONES values ('220001', 'ДМИТРИЕВА ТМ', 'ЧУГУНОВА', '14', '6');
INSERT INTO PHONES values ('220002', 'НАЗАРКИНА ЛА', 'НАБ.1ГО МАЯ', '67', '6');
INSERT INTO PHONES values ('220022', 'ЛЕОНТЬЕВА ЛВ', 'ЖЕЛЯБОВА', '40/2', '14');




#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 ') TYPE=MyISAM' at line 7

я все эти varchar поставил правильно или где то чтото другое???

CREATE TABLE PHONES (
nomer MEDIUMINT(6) default NULL,
Name varchar(60) default NULL,
street varchar(60) default NULL,
house varchar(60) default NULL,
flat varchar(60) default NULL
) TYPE=MyISAM;

1mm0rt3s
25.08.2008, 17:37
Сабж, есть файл, в расширение sql выдернутый из мускля. нужно: скопировать столбец с паролями (они в мд5). как вы понимаете в блокноте это делать проблематично, поэтому мож кто подскажет в какую программу нужно загнать

.:EnoT:.
25.08.2008, 17:52
а есть же парсер хешей из дампов sql

Chaak
25.08.2008, 18:04
Сабж, есть файл, в расширение sql выдернутый из мускля. нужно: скопировать столбец с паролями (они в мд5). как вы понимаете в блокноте это делать проблематично, поэтому мож кто подскажет в какую программу нужно загнать

<?php
preg_match_all('#[0-9a-fA-F]{32}#UiS',file_get_contents('dump.sql'),$result);
foreach($result['0'] as $md5){
echo $md5.'<br>';
}
?>
чет тока не вдуплил причем тут sql?