Я видел, что в SQL Server есть функция под названием ROW_NUMBER, в моем случае я присоединяюсь к 3 таблицам, и каждая из них имеет разные имена для столбца идентификатора (это я делаю для плагин jsTree)
У меня есть такой код:
$sql= "(SELECT
c1.idcarrera AS id,
c1.nombre as text,
null as parent_id
FROM siiupv.carrera AS c1)";
$sql. = " UNION ALL ";
$sql.= " (SELECT
pe.idplan_estudios AS id,
pe.clave AS text,
pe.idcarrera as parent_id
FROM siiupv.plan_estudios AS pe)";
$sql. = " UNION ALL ";
$sql.= " (SELECT idcarga AS id, c2.clave AS text, idplan_estudios as parent_id FROM siiupv.carga AS c2)";
$qResults = $pdo->prepare($sql);
$qResults->execute();
$count = $qResults->rowCount();
while($m = $qResults->fetch(PDO::FETCH_ASSOC)){
echo '<tr><td> '.$m["id"].'</td><td>'.$m["text"].'</td><td>'.$m["parent_id"].'</td></tr>';
}
Он производит такой вывод:
+------+------------------+
| id | text | parent_id |
+------+------------------+
| 1 | A1 | NULL |
| 2 | A2 | NULL |
| 3 | A3 | NULL |
| 1 | B1 | 1 |
| 2 | B2 | 2 |
| 3 | B3 | 1 |
| 4 | B4 | 2 |
| 5 | B5 | 5 |
| 1 | C1 | 4 | Note! (Child of "B4")
| 2 | C2 | 4 | Note! (Child of "B4")
+------+------------------+
Но я хочу получить:
+------+------------------+
| id | text | parent_id |
+------+------------------+
| 1 | A1 | NULL |
| 2 | A2 | NULL |
| 3 | A3 | NULL |
| 4 | B1 | 1 |
| 5 | B2 | 2 |
| 6 | B3 | 1 |
| 7 | B4 | 2 |
| 8 | B5 | 5 |
| 9 | C1 | 7 | Note! (Child of "B4")
| 10 | C2 | 7 | Note! (Child of "B4")
+------+------------------+
Примечание!> Идентификаторы пройдены и поэтому должны иметь значение 7
Я хотел бы получить помощь хотя бы по идентификаторам автоинкремента






Не уверен, действительно ли у меня проблема, но вы можете сгенерировать новый уникальный идентификатор, добавив к нему префикс или что-то в этом роде.
ВЫБЕРИТЕ CONCAT ("A-", idcarga) AS id, c2.clave AS text, CONCAT ("A-", idplan_estudios) как parent_id
Один из способов добавить номер строки к каждой записи набора результатов - использовать переменную сеанса:
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) id, -- t.id
t.text,
t.parent_id
FROM (
SELECT c1.idcarrera AS id, c1.nombre as text, null as parent_id FROM siiupv.carrera AS c1 ORDER BY c1.id
UNION ALL SELECT pe.idplan_estudios AS id, pe.clave AS text, pe.idcarrera as parent_id FROM siiupv.plan_estudios AS pe ORDER BY c1.id
UNION ALL SELECT idcarga AS id, c2.clave AS text, idplan_estudios as parent_id FROM siiupv.carga AS c2 ORDER BY c1.id
) t
он отлично работает в phpMyAdmin, но не в PHP, но мне пришлось заключить каждый SELECT между (), потому что он помечает ошибку mysql # 1221 из-за UNION & ORDER BY. ваша идея приближается, но я думаю, что это сеанс, который я не могу интерпретировать с помощью php
Хорошо, я добавил в конце переменную с псевдонимом, теперь все в порядке. stackoverflow.com/questions/41354929/… "....) t, (SELECT @row_number: = 0) r"
для столбца "parent_id", как я, чтобы добавить общее количество пробелов, где значение NULL, я имею в виду, я хочу изменить 4 на 7 (без тех, которые имеют NULL, перестают быть NULL), какие-либо идеи?
Вы можете просто использовать увеличивающуюся переменную:
$row = 0;перед циклом, а затем++$rowдля текущего номера строки. Однако обратите внимание, что нет никакой корреляции между этим идентификатором и любой строкой базы данных, это просто тупой счетчик.