Jump to content
php.lv forumi

Recommended Posts

Posted

SELECT 
		(SELECT 

			 z.`added`, z.`name`
		FROM `table2` AS z
		WHERE
			z.`cat_id`=ca.`id`
	   LIMIT 1) topic,
	   ca.name

	FROM
	`table1` AS ca

izdod taadu erroru: "Operand should contain 1 column(s) ".

vinjam nepatiik, ka otrajaa selectaa njemu divus ierakstus.

kaut kur droshi vien kljuuda pieprasiijumaa.

Posted

Nedaudz grūti saprast kveriju (nezinot tabulas relācijas un vēlamo rezultātu), bet ja pareizi uztveru tad tu gribi tos divus laukus aliasot kā 'topic'?

 

Nu tad workarounds varētu būt concatenot

 

... (SELECT CONCAT(z.`added`, z.`name`) FROM `table2` AS z WHERE z.`cat_id`=ca.`id` LIMIT 1) topic ....

 

Un būs viens lauks subselectā..

 

 

 

Bet ja savādāk savādāk drizāk kaut kā šādi:

 

SELECT z.`added`, z.`name`, ca.name FROM `table2` AS z, `table1` AS ca WHERE z.`cat_id`= ca.`id`

 

Tb netaisīt subselectus bet joinus.. lai gan tad ar jāzin kādi dati ir tabulā.

Posted

a prieks kam tur subselectu?

iskatas ka visparastakais JOIN (drizaak gan INNER JOIN...)

ja ir 2 atseviskjas tabulas....

---

P.S. Laikam buusi parstradajies.... ;)

Posted

kur problēma?

SELECT z.added, z.name, ca.topic, ca.name FROM `table2` z, `table1` ca WHERE z.cat_id=ca.id

varjau būt ka neizpratu lietas būtību

Posted

es nesaprotu kaapeec subselect var atgriezh tikai vienu veertiibu.

var jau izmantot concat vai concat_ws, bet tas tak ir cherez zh...

taa ir tikai dalja no mana pieprasiijuma - taa ir atbilde uz jautaajumu 'prieksh kam man subselecti'

Posted (edited)

Nu un kā to nevar saprast !? Tu veic selektu, kur kolonnas vērtība ir subselekta rezultāts.. attiecīgi subselektam IR JĀATGRIEŽ tikai VIENA rinda UN viena kolonna! basta...!

 

čerez ž... izskatās tavs pieprasījums, jo tur ir tipisks JOIN... tavā subselekta vispār nav nekas specifisks un pārdabisks...

Edited by Delfins
Posted (edited)

Tāpēc, ka subselecti rezultāt atgriež šādi:

 

(select ...) as x

 

Kā, tavuprāt, tas varētu atgriezt divus ?

 

Tas ir tāpāt kā funkcijas atgriež tikai vienu rezultātu (Protams, var jau ar masīviem utt, bet tas jau ir cits stāsts).

 

nemec, labāk pastāsti, ko vajag dabūt gatavu.

Edited by andrisp
Posted

atradu te pat forumaa

UPDATE (
SELECT user_id, sum( kaaposti_h ) AS summa
FROM t2
GROUP BY user_id
) summary, t1
SET t1.kaaposti = t1.kaaposti + summary.summa 
WHERE t1.id = summary.user_id;

kas tur diez taads iipash, ka es gribu divas veertiibas

Posted

it kā tādu SQL mysql pieļauj... UPDATE (select ...) SET ... WHERE..

Bet es neesmu pārliecināts vai to tiešām tā vajag darīt. Nu nesmuki...

 

Ja atbild uz nemec jautājumu, tad UPDATE un SELECT gadījuma tur 2 dažādas interpretācijas - pie UPDATE tiek veidots temp rezultāts, bet pie SELECT rezultāts tiek atgriezts kolonnā. Nu nesmuki ta darīt... kāpēc jāpilda 1000x subselekti, ja joins visu pats izdarīs?

Posted

Vai tad parasti selektu selektā neizmanto tad, kad nepieciešams izselektēt kautko, kur vērtība ir kautkas no citurienes, karo4 piem:

SELECT j.jautajums FROM `jautajumi` j WHERE lang=(SELECT id FROM `valodas` WHERE name='{$_GET['lang']}' LIMIT 1 )

domāju aptuveni tā, ka aiz SELECT parasti raksta izselektējamās kolonas, ne?

šajā gadījumā, ja nepieciešams piem divas valodas (piemērs stulbs, bet pieņemam, ka divām valodām ar dažādiem id ir vienādi nosaukumi)

SELECT j.jautajums FROM `jautajumi` j WHERE lang=ANY(SELECT id FROM `valodas` WHERE name='{$_GET['lang']}')

Posted

Mārci, tam ir domāts JOIN.

$result=mysql_query("SELECT j.jautajums FROM jautajumi J INNER JOIN valodas v ON j.lang=v.id WHERE v.name='".mysql_real_escape_string($_GET['lang'])."');

Posted
SELECT 
		(SELECT 

			 z.`added`, z.`name`
		FROM `table2` AS z
		WHERE
			z.`cat_id`=ca.`id`
	   LIMIT 1) topic,
	   ca.name

	FROM
	`table1` AS ca

 

Šis ko Tu vēlies dabūt saucās skalārie apakšvaicājumi (scalar subquery) un tie var atgriezt tikai vienu vērtību. Šis apakšvaicājumu veids ir aprakstīts šeit http://dev.mysql.com/doc/refman/5.1/en/sca...subqueries.html

Tur tā īpaši uzsvērts nav, ka var būt tikai viena vērtība, bet acīmredzot tā tomēr ir. Tā kā es vairāk kaut ko sajēdzu no Oracle, tad tur ir analogi, kas ir aprakstīti šeit http://download.oracle.com/docs/cd/B19306_....htm#sthref2680

Un Oracle aprakstā ir rakstīts apmēram tas pats, tikai uzsvērts, ka "A scalar subquery expression is a subquery that returns exactly one column value from one row".

 

Gints Plivna

http://datubazes.wordpress.com

×
×
  • Create New...