Изкарване на данни по id от таблица.

novakabg

Registered
Добър ден. :)
Имам две таблици

Таблица 1
id
и
Таблица 2
име

Имате ли идея как да изкарам името по ид-то.

Пример:
На номер 10 в таблица 1 отговаря

Име 10 от таблица 2.

Може ли някакъв пример, по нов ако може. :) [/php]
 
Ехе, толкова подробно описани, токова код и инфрмация, чак не знам от къде да почна да чета ?! :D Kaжи ми сега, какво ти пречи да си дадеш структората на таблиците с истинските полета и да кажеш какъв е проблема ?:shock:
[sql]Select * from tablica1, tablica2 where tablica1.id = tablica2.name[/sql] :?: :cry:
 
В таблицата с имената трябва да имаш референция по ID.

Примерна структура

Table1:
ID --- Username --- Password
1 --- novaka --- somepass
2 --- jotunking --- somepass2
3 --- lamercho --- somepass 3

Тable2:
ID --- Name
1 --- Ivan
2 --- Stoqn
3 --- Vlado


[sql]SELECT t2.Name FROM Table1 t1, Table2 t2 WHERE t1.id = ID AND t1.id = t2.id[/sql]

Като ID ти е взето предварително, ако искаш да вземеш за определен потребител. Ако искаш да вземеш за всички потребители, просто махаш t1.id = ID AND и оставаш втория statement.
 
lam3r4370 каза:
Препоръчително е с foreign key, както и колегата каза, ама ако не искаш виж join по rownum

Почти задължително, ако двете таблици са пряко свързани.
 
Сега ще стане забавно :D

Ето едната табличка

CREATE TABLE IF NOT EXISTS `if_order` (
`user_id`
int(11) NOT NULL AUTO_INCREMENT,
`order_id`
int(11) NOT NULL AUTO_INCREMENT
)


Ето втората табличка :

CREATE TABLE IF NOT EXISTS `if_users` (
`user_id`
int(11) NOT NULL AUTO_INCREMENT,
`firstname`
varchar(32) NOT NULL,
KEY `cq_id` (`cq_id`)
)





Така си викам поръчката и users_id




$sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, user_id, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `" . DB_PREFIX . "order` o";



Мъчих така но нещо не се получи..
Код:
if ($order_query->row['user_id']) {
				$user_id = $order_query->row['user_id'];
			} else {
				$user_id = 0;
			}		

if ($user_id) {
				$if_users_firstname = $user_id['firstname'];
			 
			} else {
				$if_users_firstname = '';
			 		
			}
 
Виж сега, аз имам едно правило, което си следвам при такива сложини шитни, понеже ми се налага да мисля много сложни процеси за отрицателно време и не винаги нацелвам правилната структура на нещата от първият път и благодарение на правилото ми - успявам да се ориентирам :)

1. Имаш таблица с поръчките и таблица с статус на поръчките. Това значи, че една поръчка може да има 5 статуса едновремено - ОК, ама няма смисъл.

2. ПАК НЕ СИ ДАЛ ЦЯЛАТА СТРУКТУРА НА ТАБЛИЦИТЕ, ама айде, бял кахър. Мисълта ми, е че и за продуките, които е поръчал клиента/поребителя сигурно ги взимаш с отделна заявка. (Тука идва един много як проблем, който сега не осъзнаваш, но после ще видиш с цените, но пък може и да си се сетил).

3. Имаш ли 2 или повече select-а,(както в момента) работите стават доста заплетени и когато се налага да смениш нещо дребно или да добавиш нещо дребно ще стане батак.
SELECT ...
(SELECT ... ) as status,
... FROM orders

Бтв, CI, нямаше ли Active Record ? Използвай него, ще се родиш. За предпочитане е пред статичните заявки.

И така правилото е, първо обмисли как искаш да достигаш информацията и структурата сама ще ти се разкрие.

Пример с твоя пример хаха:
Потребители
Продукти
Поръчки

Измислил съм всичко, остава да видя кое как ще записвам относно поръчките на потребителя.

1. Искам в профила да си вижда неговите поръчки, продукти, количества и т.н.
2. искам на да вида ако е купувал 5 едни и същи продукта в рамките на 1 година - да му дам отстъпка
3. Да му дам отстъпка ако има над 6 завършени поръчки.

Следователно, трябва всичко да ми е в таблицата с поръчките, за да имам достатъп, и единственото нещо, което ще бъде динамично, ще е връзката с портебителя по id или Username.

За да мога накрая да кажа:
PHP:
$s = "SElect * from order where user_id ='1312213213213'";
$orders = ...;

foreach($orders as $order)
{	
    $oborot = 0;
	$TogavashnaKolichka_produkti = unserialize($order['cart_data']);
	foreach($TogavashnaKolichka_produkti as $p)
	{
		$oborot+=$p->qty*$p->price;
	}

	echo "За поръчка ".$order['id'].' си напрваил '.$oborot. ' - брау ве' ;
}

И така имаш цялата информация. НЕ казвам, че да имаш 16 цикъла, един в друг е добре, това е просто пример, измислен за 2 мин(докато пиша), използвайки правилото. Не казвам, че правилото ще те спасява на 100% , но все пак. В смисъл, ще имаш някакви кахъри ама те ще са много малки, пример за това е как да сейфаш количката на потребителя в ДБ - и веднага ми изникна serialize - нищо трудно. Дано схващаш :) :idea: :?:

WTF, човек:
`if_order` (
`user_id`
int(11) NOT NULL AUTO_INCREMENT,
`order_id`
int(11) NOT NULL AUTO_INCREMENT
)

Какво ще стане ако 1 потребител има 2 поръчки - Ще ти инкрементира id-to на усера хахах - автогол :D :D


Забравих да кажа, че ако има работи, които може да ги спестиш и МОЖЕ да се включат в заявката и да се махнат от loop-а - ще е добре да го направиш. Също така, може да си ползваш join-ве - дерт няма, да не си помислиш нещо.

Ехе, заех цяла страница - еб*симусс :D :D
 
novakabg каза:
Добър ден. :)
Имам две таблици

Таблица 1
id
и
Таблица 2
име

Имате ли идея как да изкарам името по ид-то.

Пример:
На номер 10 в таблица 1 отговаря

Име 10 от таблица 2.

Може ли някакъв пример, по нов ако може. :) [/php]
Защо не си опростиш живота, като просто създадеш релация между двете таблици? MySQL е релационна база данни, така че няма да я натовариш много, ако сложиш едно ID в таблица 2... :D
 

Back
Горе