нужна помощь
1.
ZipeR (25.04.2018 / 18:29)
Имеется масив, состоящий их строковых данных
допустим:
$arr[0]='hello'; $arr[1]='world';
Требуется вывести из таблицы бд mysql все записи, определённая ячейка которых соответствует одному из элементов массива:
mysql_query("SELECT title FROM $table WHERE value=*Одному из значений*$arr[]");
Далее сложнее.
Для ячеек, в которых value равен последнему элементу массива, надо вернуть не только title, но и, допустим, descrition (одну или несколько дополнительный ячеек). На примере выше, для всех строк со значением value='world' требуется вернуть не только title, но и description.
Далее ещё сложнее.
Допустим, каждая запись имеет свой уникальный id и значение родителя (его id), что бы иметь возможность обратиться к нему. Можно ли выводить исключительно те записи из БД, в которых не только значение value соответствует значению элемента массива, но и значение value родителя соответствует значению предыдущего элемента массива.
Возможно ли такое вообще в mysql? Заранее спасибо.
2.
Андрей (25.04.2018 / 19:22)
чот какой то быдлокод
3.
neuberon (12.06.2020 / 22:38)
Ты пытаешься решить одним запросом разные задачи.
Тебе нужно не брать значение одного столбца, а брать всю строчку. И пихать её в массив. И дальше уже логику от значений массива писать. 2м запросом так же дергай родителя. Ты же когда пытаешься выполнить запрос и найти строку не знаешь же id строки которая найдется (а может быть и не одной строки), бд то откуда такие вещи предугадывать?
4.
Вантуз-мен (13.06.2020 / 14:33)
ZipeR, все правильно написал
neuberon, делай выборку всех полей на mysql, а потом уже решай на php какие поля выводить
вообще если я правильно понял можно все это сделать 1 запросом, типа WHERE IN и left join
5.
erasier (13.06.2020 / 22:18)
Как быстро идёт разработка
6.
vikamass (13.11.2023 / 04:36)
Доброе, подскажите у меня имеются записи которые нужно быстро нужно построить по 1,2,3,4,5,6 по порядке в order., помогите плиз
7.
Вантуз-мен (13.11.2023 / 13:45)
vikamass, а что у тебя за записи, массив, коллекция или данные в бд?
8.
vikamass (13.11.2023 / 18:53)
Анкеты пользователей ., создала таблицу order, но вручную замучаюсь ввозить 1,2,3,4,5 «...» нужно чтобы вписать и автоматически заставился порядок.
9.
Вантуз-мен (14.11.2023 / 12:16)
vikamass, создай поле к примеру sort и заполни его текущим id
UPDATE table SET sort = id;
ну и в запросе вывода данных сортируй
select * from table order by sort (asc|desc)
10.
vikamass (14.11.2023 / 12:55)
Ты меня не по я создала таблицу order она пустая, мне нужно чтобы в эту таблицу занеслись цифры по возрастанию 1,2,3,4,5 ....
11.
Вантуз-мен (14.11.2023 / 13:47)
vikamass, ну так создай автоинкрементное поле, если таблица есть переделай или удали и создай заново
https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html
12.
vikamass (14.11.2023 / 14:34)
Очень сложно
напиши лучше пример тут
13.
Вантуз-мен (14.11.2023 / 14:55)
vikamass, переходила по ссылке там есть пример
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
SELECT * FROM animals order by id;
14.
vikamass (15.11.2023 / 04:02)
Ты меня не понял вот смотри у меня имеются 2000 записей., где я создала таблицу order и чтобы вручную вводить цифры по возрастанию 1,2,3,4,5 ... Мне нужно упрастить.
То , что ты показал пример он не подходит ко мне
15.
Александр (15.11.2023 / 06:09)
Приведенный ниже код создаст запросы для изменения каждой колонки в таблице:
SELECT CONCAT('ALTER TABLE your_table_name MODIFY COLUMN ', COLUMN_NAME, ' INT AUTO_INCREMENT PRIMARY KEY;')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name';
Замени your_table_name на реальное имя таблицы. Этот запрос создаст список команд ALTER TABLE, которые вы можете выполнить, чтобы добавить AUTO_INCREMENT ко всем существующим колонкам.
Если я правильно понял.
P.s GPT
16.
Вантуз-мен (15.11.2023 / 12:08)
Ты меня не по я создала таблицу order она пустая, мне нужно чтобы в эту таблицу занеслись цифры по возрастанию 1,2,3,4,5 ....
Сперва ты написала, что у тебя таблица пустая
Если уже есть записи, то сделай как посоветовал Александр
17.
vikamass (15.11.2023 / 21:50)
Вантуз-мен, я не сильна в терминах
Добавлено через 07:22 сек.
Александр, спасибо но я не умею это вставлять, очень трудно для меня., на скрине покажу наглядно
18.
Вантуз-мен (15.11.2023 / 23:57)
vikamass,
UPDATE worksheet SET list = id;
это всем твоим записям присвоит такой же номер как id
а потом уже можешь изменить порядок какой тебе надо
А для новых записей зависит через что ты добавляешь их
можно создать триггер
CREATE TRIGGER new_trigger
AFTER INSERT
ON worksheet ... итд
или делать вставки через orm что-то типа
INSERT INTO worksheet( list, ...)
VALUES ((SELECT MAX( list )+1 FROM worksheet) , ...)
но это менее надежно
ну или заполняй вручную при вставке
19.
vikamass (16.11.2023 / 23:33)
А можно сделать так, чтобы постоянно менялось расположение
20.
LaboykoGroup (20.11.2023 / 09:44)
ZipeR,
Для решения вашей задачи вы можете использовать запросы SQL с использованием операторов IN и JOIN. Давайте рассмотрим каждый этап вашего запроса.
Выборка записей, где значение value соответствует одному из элементов массива:
$values = implode("','", $arr);
$query = "SELECT title FROM $table WHERE value IN ('$values')";
// Выполнение запроса и обработка результатов
Здесь мы используем функцию implode для объединения элементов массива в строку и подставляем их в оператор IN запроса.
Вывод данных, когда значение value равно последнему элементу массива, включая дополнительные поля:
$lastValue = end($arr); // Получаем последний элемент массива
$query = "SELECT title, description FROM $table WHERE value = '$lastValue'";
// Выполнение запроса и обработка результатов
Здесь мы используем функцию end для получения последнего элемента массива и включаем соответствующие поля в запросе.
Вывод данных, когда значение value и значение родителя соответствуют значениям предыдущего элемента массива:
Для этого вам нужно использовать оператор JOIN для объединения таблицы с самой собой (self-join). Предположим, у вас есть поле parent_id, которое указывает на родительский элемент:
$previousValue = null;
foreach ($arr as $value) {
$query = "SELECT t1.title, t1.description FROM $table t1
JOIN $table t2 ON t1.parent_id = t2.id
WHERE t1.value = '$value' AND t2.value = '$previousValue'";
// Выполнение запроса и обработка результатов
$previousValue = $value;
}
Здесь мы используем JOIN для объединения таблицы с самой собой по условию, что parent_id равен id предыдущей записи, и фильтруем по значениям из массива.
21.
vikamass (21.11.2023 / 22:37)
Вантуз-мен, ни чего у меня не получается, пойдём с другой стороны к примеру интернет магазине постоянно меняется расположение товаров, как этого добиться
22.
Вантуз-мен (21.11.2023 / 22:52)
В твоём случае решить проблему можно просто добавив order by id к запросу
23.
vikamass (22.11.2023 / 00:38)
Вантуз-мен, я не вижу как разнаброс
24.
Вантуз-мен (22.11.2023 / 00:48)
Что это? О чем ты, что такое разноброс?
25.
vikamass (22.11.2023 / 01:16)
Порядок постоянно меняется id
26.
Александр (22.11.2023 / 04:09)
Вы можете использовать функцию
ORDER BY RAND() в запросе
SELECT, чтобы получить результаты в случайном порядке при каждом обновлении страницы.
Пример запроса:
SELECT * FROM table_name ORDER BY RAND();
Этот запрос выбирает все строки из таблицы "
table_name" и сортирует результаты в случайном порядке. При каждом обновлении страницы вы получите разные результаты.
P.s GPT
27.
vikamass (22.11.2023 / 13:06)
Александр, спасибо получилось, но когда пытаюсь добавить, не работает.
28.
Вантуз-мен (22.11.2023 / 13:40)
vikamass, у меня такое ощущение, что ты постоянно рофлишь
Если перечитать твои сообщения, то ты сперва писала, что тебе нужно упорядочить, а в итоге наоборот
29.
vikamass (22.11.2023 / 15:10)
Вантуз-мен, ЕЩЁ РАЗ ГОВОРЮ!!!! МНЕ НАДО ЧТОБЫ БЫЛО ПОЛОЖЕНИЕ ПОРЯДКА МЕНЯЛСЯ ПОСЛЕ ОБНОВЛЕНИЯ!!!!!!!!
30.
Александр (22.11.2023 / 20:19)
vikamass,
Ошибка в SQL-запросе: выражение
ORDER BY RAND() AND published='available' AND top='available' AND secure='yes' DESC некорректно сформулировано. Вы используете
AND внутри
ORDER BY, что не допустимо. Допустимо использовать
ORDER BY с атрибутами сортировки, но в вашем случае они должны быть частью
WHERE или
HAVING предложения.
Добавлено через 06:14 сек.
$e1 = "SELECT * FROM questionnaires WHERE published='available' AND top='available' AND secure='yes' ORDER BY RAND() DESC";
$e2 = mysql_query($e1);
while ($e3 = mysql_fetch_array($e2)) {
echo $e3['id'] . "<br>";
}
Изменились следующие вещи:
1) Перемещены условия
(published='available', top='available', secure='yes') в блок
WHERE запроса, чтобы фильтровать результаты.
2) Изменён порядок элементов в запросе: сначала фильтры, затем
ORDER BY RAND() DESC для случайной сортировки.
3) Используется
$e3['id'] вместо
"$e3[id]" для обращения к столбцу
id.
P.s GPT
31.
vikamass (22.11.2023 / 20:55)
Я нашла рабочий вариант для меня, типо такое
SELECT * FROM (SELECT * FROM users ORDER BY rand() LIMIT 20) T1 ORDER BY name
Мне нужно ORDER BY там можно сортировку настроить как я хотела
пепец 4 дня понадобилось, чтобы найти
URL:
https://visavi.net/topics/43971