User not logged in - login - register
Home Calendar Books School Tool Photo Gallery Message Boards Users Statistics Advertise Site Info
go to bottom | |
 Message Boards » » SQL query help thread... Page 1 2 3 4 5 [6] 7, Prev Next  
1985
All American
2175 Posts
user info
edit post

^sql server - datepart(week,DATE)

1/5/2011 1:14:05 AM

Stein
All American
19842 Posts
user info
edit post

When you run that command on the date 2011-01-01 what does it return?

1/5/2011 8:50:47 AM

afripino
All American
11422 Posts
user info
edit post

should be an integer = 1

1/5/2011 12:04:27 PM

Stein
All American
19842 Posts
user info
edit post

See, you would think so, but in MySQL it's actually 52. That's why I ask -- I'm wondering how SQL Server handles it.

1/5/2011 2:04:46 PM

afripino
All American
11422 Posts
user info
edit post

it's returning the calendar week of the year, similar to the MySQL WEEKOFYEAR() function. to my knowledge (which is very little for MySQL), there isn't a DATEPART() function by that name.

1/5/2011 3:11:54 PM

Stein
All American
19842 Posts
user info
edit post

What I'm saying is that SELECT WEEKOFYEAR('2011-01-01'); in MySQL returns 52.

Because it's not the first week of this year, it's the last week of last year.

SELECT WEEKOFYEAR('2011-01-01'); = 52
SELECT WEEKOFYEAR('2011-01-02'); = 52
SELECT WEEKOFYEAR('2011-01-03'); = 1

1/5/2011 3:19:37 PM

afripino
All American
11422 Posts
user info
edit post

Looks like MySQL is using the ISO-8601 standard as described here:
http://www.epochconverter.com/epoch/weeknumbers.php

MSSQL, on the other hand, is assuming day 1 of week 1 would be January 1st. Here's a MSSQL function to convert to the ISO-8601 standard:

drop function dbo.F_ISO_WEEK_OF_YEAR
go
create function dbo.F_ISO_WEEK_OF_YEAR
(
@Date datetime
)
returns int
as
/*
Function F_ISO_WEEK_OF_YEAR returns the
ISO 8601 week of the year for the date passed.
*/
begin

declare @WeekOfYear int

select
-- Compute week of year as (days since start of year/7)+1
-- Division by 7 gives whole weeks since start of year.
-- Adding 1 starts week number at 1, instead of zero.
@WeekOfYear =
(datediff(dd,
-- Case finds start of year
case
when NextYrStart <= @date
then NextYrStart
when CurrYrStart <= @date
then CurrYrStart
else PriorYrStart
end,@date)/7)+1
from
(
select
-- First day of first week of prior year
PriorYrStart =
dateadd(dd,(datediff(dd,-53690,dateadd(yy,-1,aa.Jan4))/7)*7,-53690),
-- First day of first week of current year
CurrYrStart =
dateadd(dd,(datediff(dd,-53690,aa.Jan4)/7)*7,-53690),
-- First day of first week of next year
NextYrStart =
dateadd(dd,(datediff(dd,-53690,dateadd(yy,1,aa.Jan4))/7)*7,-53690)
from
(
select
--Find Jan 4 for the year of the input date
Jan4 =
dateadd(dd,3,dateadd(yy,datediff(yy,0,@date),0))
) aa
) a

return @WeekOfYear

end
go



[Edited on January 5, 2011 at 3:49 PM. Reason : ]

1/5/2011 3:49:05 PM

1985
All American
2175 Posts
user info
edit post

^ yeah. A side effect is MSSQL gives the last days of the year as week 53

1/5/2011 4:59:02 PM

quagmire02
All American
44225 Posts
user info
edit post

i was not aware that mysql wouldn't like this ("you can't specify target table 'table' for update in FROM clause"):

UPDATE table SET fapfap=1 WHERE id=(SELECT id FROM table WHERE lol='wut' ORDER BY date DESC LIMIT 1,1)
so how would i do this?

[Edited on February 9, 2011 at 9:22 PM. Reason : .]

2/9/2011 9:21:56 PM

msb2ncsu
All American
14033 Posts
user info
edit post

Works if you select from an aliased subquery:

UPDATE mantis_user_table SET realname='changed' WHERE id =
( SELECT id FROM (SELECT * FROM mantis_user_table WHERE username='test') as qwerty)

Ugly as hell but performs the update.

2/10/2011 2:34:41 AM

quagmire02
All American
44225 Posts
user info
edit post

^ worked perfectly...thanks!

and yes, it's pretty damn ugly

2/10/2011 7:53:37 AM

stowaway
All American
11770 Posts
user info
edit post

anyone done any paypal IPN handler integration? I can't get this crap to transfer the IPN variables to the database at all. It's not spitting out any errors, and the IPN part seems to be handled properly when doing a test transaction in sandbox, but it isn't working right. I've gone through the tutorial a dozen times. I've copy and pasted the code. I've gone so far as to removing any changes in values/names I may want and it still isn't sticking the stuff in the db. The tables have been set up both manually, uploading .sql files, and doing it through sql query panel. None of this has made a difference.


<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
author: codex-m
website: http://www.php-developer.org
license: open source
*/
//Read my Paypal IPN tutorial series in PHP here:http://www.devshed.com/cp/bio/Codex%98M/
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$invoice = $_POST['invoice'];
$customeripaddress=$_POST['custom'];
$productname=$_POST['item_name'];
include 'this_is_correct, database connect';
if (!$fp) {
$log='http error='.$errno;
$log = mysql_real_escape_string($log);
mysql_query("INSERT INTO ipnlogs (eventlog) VALUES ('$log')");
}
else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
$log='Verified IPN Transaction';
$log = mysql_real_escape_string($log);
mysql_query("INSERT INTO ipnlogs (eventlog) VALUES ('$log')");
$txn_id = mysql_real_escape_string($txn_id);
if (!($fetch = mysql_fetch_array( mysql_query("SELECT `TransactionID` FROM `customerrecords` WHERE `TransactionID`='$txn_id'")))) {
if ($receiver_email=='this_is_correct') {
$receiver_email = mysql_real_escape_string($receiver_email);
}
else {
die('ERROR: Invalid Paypal Seller Email address.');
}
if ($payment_currency=='USD') {
$payment_currency = mysql_real_escape_string($payment_currency);
}
else {
die('ERROR: Incorrect currency');
}
$productname = mysql_real_escape_string($productname);
$result = mysql_query("SELECT `ProductPrice` FROM `productstable` WHERE `ProductName`='$productname'")
or die(mysql_error());
$row = mysql_fetch_array($result)
or die("Invalid query: " . mysql_error());
$productprice = $row['ProductPrice'];
if ($payment_amount==$productprice) {
$payment_amount = mysql_real_escape_string($payment_amount);
}
else {
die('ERROR: Incorrect payment amount');
}
if ($payment_status=='Completed') {
$payment_status = mysql_real_escape_string($payment_status);
}
else {
die('ERROR: Payment status not completed');
}
require_once('is_email.php');
if (is_email($payer_email)) {
$payer_email = mysql_real_escape_string($payer_email);
}
else {
die('ERROR: Invalid payer email address');
}
if (ctype_alnum($invoice)){
$invoice = mysql_real_escape_string($invoice);
}
else {
die('ERROR: The submitted invoice data is NOT a NUMBER');
}
if(filter_var($customeripaddress, FILTER_VALIDATE_IP)){
$customeripaddress = mysql_real_escape_string($customeripaddress);
}
else {
die('ERROR: The submitted IP address data is NOT valid.');
}
$downloadstatus='incomplete';
$downloadstatus = mysql_real_escape_string($downloadstatus);
mysql_query("INSERT INTO customerrecords (PaymentStatus,PaymentAmount,PaymentCurrency,PayerEmail,ReceiverEmail,TransactionID,InvoiceNumber,ProductPurchased,IPAddress,DownloadStatus) VALUES ('$payment_status','$payment_amount','$payment_currency','$payer_email','$receiver_email','$txn_id','$invoice','$productname','$customeripaddress','$downloadstatus')")
or die(mysql_error());
mysql_close($dbhandle);
}
else {
die('Could not process request-transaction ID already exist');
}
}
else if (strcmp ($res, "INVALID") == 0) {
$log='Invalid IPN transaction';
$log = mysql_real_escape_string($log);
mysql_query("INSERT INTO ipnlogs (eventlog) VALUES ('$log')");
}
}
fclose ($fp);
}
?>

2/11/2011 3:20:50 PM

BigMan157
no u
103354 Posts
user info
edit post

Quote :
"include 'this_is_correct, database connect';"


you sure you even have a mysql connection open?

2/11/2011 4:40:49 PM

stowaway
All American
11770 Posts
user info
edit post

well, it is pointing to the absolute server path of the connect.php file. I've double-checked that part. I'm going to say yes because if I run the IPN test pointing at this file in Sandbox it does insert a verified transaction entry in the ipnlog table. If I run a regular transaction from the index.php page going through the regular paypal checkout system it doesn't. In either case it does not put anything in the customerrecords table.

The customerdownload.php file returns the error "ERROR: The invoice number data is not valid." when submitted, which means it is connecting to the database, looking for an entry, and finding out there isn't an entry.

[Edited on February 11, 2011 at 5:49 PM. Reason : jk]

2/11/2011 5:44:27 PM

stowaway
All American
11770 Posts
user info
edit post

any other ideas before I start from scratch?

2/15/2011 1:33:35 PM

stowaway
All American
11770 Posts
user info
edit post

ok, no wonder nobody could find anything wrong. It was all on paypal's side of things.

[Edited on February 15, 2011 at 5:49 PM. Reason : afd]

2/15/2011 5:44:04 PM

CaelNCSU
All American
7079 Posts
user info
edit post

This would help a lot of you when you paste code examples:

http://pastebin.com/

2/15/2011 11:22:18 PM

Shadowrunner
All American
18332 Posts
user info
edit post

OK, I'm modeling the probability of failure for hurricane protection systems in Louisiana, and I have a big database of levees and floodwalls and whatnot. For some lengths along levees, we don't have complete survey data, so we want to estimate the probability at those points as being equal to the probability of failure for the closest points at which we do have data. To whit:

Each levee segment is coded with several IDs, a type, and a location. The primary key ID for each object is called swp_id; reach_id and bhu_id identify the levee and the region that the levee is protecting; type indicates whether the segment is a levee, a floodgate, a pump station, etc; and location indicates how many linear feet along the levee the midpoint of that segment is located.

So what I need is a query that, for every swp_id, selects the swp_id of the object closest to that point which 1) has the same reach_id and bhu_id, and 2) is of a certain type (say type <> 1 just as an example). "Closest" is defined by minimizing the difference between the Location value of point A and point B for points A and B having the same reach_id and bhu_id.

This is in postgreSQL, so I've got support for subselects and things like that. I also have lat/lon coordinates if that's easier to work with than the location values. I also have the data geocoded and could probably do it that way, but I'm not sure how to do the VBA scripting in ArcMap to restrict the geospatial query to only look at points with the same reach_id and bhu_id.

Example:

swp_id reach_id bhu_id type location
1 1 1 2 0
2 1 1 1 2
3 1 1 2 3
4 1 1 2 5
5 1 2 2 0
6 1 2 1 1
7 1 2 2 3


The query would return

swp_id  closest_id
1 3
2 3
3 4
4 3
5 7
6 5
7 5


Assume that every reach_id/bhu_id combination has more than one point of type <> 1, so that there is a valid closest point. I don't think I would assume that the "closest" point is unique, as there are likely cases where the points are evenly spaced so the closest points on each side are the same distance away; in that case, it doesn't matter which one gets selected, but I only need one of them.

3/23/2011 3:05:24 PM

Stein
All American
19842 Posts
user info
edit post

Quote :
"the probability of failure for hurricane protection systems in Louisiana"


100%

----------------------

In seriousness, let me make sure I understand this... closest_id just another swp_id, right? And, in the case of swp_id=1 you're determining that swp_id=3 is the closest one because type<>1 and the 0 is closer to 3 than 5, right?

3/23/2011 4:26:55 PM

Shadowrunner
All American
18332 Posts
user info
edit post

Right.

3/23/2011 4:38:51 PM

Stein
All American
19842 Posts
user info
edit post

This is the MySQL for it, should be pretty close to what the PostrgeSQL is:

SELECT t.swp_id,
(SELECT n.swp_id FROM data_table n WHERE t.swp_id<>n.swp_id AND t.reach_id=n.reach_id AND t.bhu_id=n.bhu_id AND n.type<>1 ORDER BY ABS(t.location - n.location) LIMIT 1) closest_id
FROM data_table t


[Edited on March 23, 2011 at 5:05 PM. Reason : .]

3/23/2011 5:05:09 PM

Shadowrunner
All American
18332 Posts
user info
edit post

Oh sweet baby Jesus, for some reason I didn't think of using the ABS(t.location - n.location) in an ORDER BY clause. I was getting stymied by trying to put it in a WHERE clause with it equal to the MIN of that difference, and postgre complaining about having an aggregate function in the WHERE clause. That really simplifies things, I think I should be able to adapt that.

Big ups, thanks a lot.

3/23/2011 5:20:44 PM

spöokyjon

18617 Posts
user info
edit post

This is more schema related than query related, but if I change the text encoding of a field in a database will it fuck up any of the existing data? If you look at the home page on phpMyAdmin, it says the charset is utf8, but any special characters get converted to those stupid question mark characters. The collation for every text field is latin1_swedish_ci (Swedish? what?? why?). If I change the collation, will that allow special characters to be stored properly? Will it do anything to the text already in the database? I didn't set this up, but when I did something similar recently on my own I just did everything as utf8 and didn't have any problems with special characters.

3/24/2011 11:30:47 AM

BigMan157
no u
103354 Posts
user info
edit post

as a stopgap, if you bust out a SET names UTF8 query before any of your other queries it'll fix that

also http://php.net/manual/en/function.mysql-set-charset.php if your version is up-to-date enough

3/24/2011 6:27:40 PM

1985
All American
2175 Posts
user info
edit post

I don’t know if this is possible (I know it’s probably not proper). But is there a way to dynamically join a table to itself an arbitrary number of times.

For example, Table ‘Transactions’ contains two relevant fields - ’SKU_out’ and ’SKU_in’

This table might keep track of library inventory leaving and returning. When it’s in inventory, it has a unique SKU, when it is checked out, that SKU gets inserted into the ‘SKU_out’ field. When the item comes back, it gets assigned a new SKU and is logged in the ‘SKU_in’ field.

That new SKU might go out again and would come back as some new SKU.

What I would like to be able to do is say ‘how many items have had x number of transactions’ for any arbitrary number x.

4/13/2011 4:15:20 PM

aaronburro
Sup, B
53062 Posts
user info
edit post

that just seems like a bad design to begin with...

4/13/2011 7:09:24 PM

BigMan157
no u
103354 Posts
user info
edit post

can you not just do a group by and then a where statement on a count()?

i'm not totally following you so...

4/13/2011 8:38:42 PM

1985
All American
2175 Posts
user info
edit post

^^ yeah, its bad design

^ No, i can't, since the SKU changes every time it goes out. Im trying track how many times a physical object left and came back. The problem is it gets a new label each time it comes in.

4/13/2011 10:11:33 PM

FroshKiller
All American
51911 Posts
user info
edit post

can we get quagmire02 in here to open his dick trap about you guys criticizing the design for a page

4/14/2011 8:34:53 AM

scrager
All American
9481 Posts
user info
edit post

^^ can you do a data update and assign an object id to all of the sku ins and outs? then you can do a count or grouping on object id? IE: the object id stays the same even though the object gets a new label every time it comes in.

4/15/2011 2:22:56 PM

1985
All American
2175 Posts
user info
edit post

No, I can't update anything.

I guess I could transfer everything to our servers and rearrange the data.

4/20/2011 2:18:26 PM

spöokyjon

18617 Posts
user info
edit post

Storing images in SQL as blobs as opposed to on the file system is pretty much an objectively bad idea, right?

4/29/2011 12:07:02 PM

quagmire02
All American
44225 Posts
user info
edit post

Quote :
"can we get quagmire02 in here to open his dick trap about you guys criticizing the design for a page"

hah, i just saw this...i do really like how you THINK you have a lot to contribute, but never actually manage to to share your expansive knowledge with anyone

4/29/2011 12:43:06 PM

FroshKiller
All American
51911 Posts
user info
edit post

I wouldn't say so. Depends on your implementation. If I had some relatively light binaries that I wanted associated with records in the database (like badges identifying a usergroup or some shit), I might be better off using BLOBs just for the sake of being able to secure them with the database's security and distribute them with the data innately, e.g. just distribute a back-up rather than an archive with the back-up and a folder of files.

4/29/2011 12:47:59 PM

Stein
All American
19842 Posts
user info
edit post

Quote :
"Storing images in SQL as blobs as opposed to on the file system is pretty much an objectively bad idea, right?"


Outside of some very, very, very specific purposes, it's a bad idea. It's not what the database is for and it's not how it should be used.

[Edited on April 29, 2011 at 3:04 PM. Reason : .]

4/29/2011 3:04:19 PM

qntmfred
retired
40722 Posts
user info
edit post

i'm just gonna use this thread to gripe for a minute

data architect at work gave us a table with a compound key of five GUIDs

i swear to god he's just trolling us

5/6/2011 4:41:47 PM

FroshKiller
All American
51911 Posts
user info
edit post

maybe he just wanted to ensure the values were also unique across four alternate earths

5/9/2011 1:20:10 PM

EuroTitToss
All American
4790 Posts
user info
edit post

^,^^ very effective in http://en.wikipedia.org/wiki/Anathem

5/9/2011 2:40:25 PM

spöokyjon

18617 Posts
user info
edit post

Okay, so I have ~5000 customer records that are entered, updated, etc. on an internal web site (php/mysql). A small portion of this data (each customer's name, account number, and account expiration date) is transferred to a local MS SQL server periodically via a C# app run locally (our POS machines run off of the local MS SQL database, so we need to do this so that when a customer's membership card is swiped, the POS can look up current account information on the local server).

If all of this was on the same system, or if the web site had a way of updating the local database in a way I were comfortable with (i.e. I'd rather not open it up to the outside world), I would simply update each record as needed on both databases at the same time. Since that's not really an option here, I'm left with batching the data.

What I currently do is simply delete all records from the table on the local server and then insert everything back from the web site. Is that bad? Or, more specifically:

Mass deletion and insertion to update batches of data is:
1) the worst idea ever.
2) not the best way to do it, but it won't hurt anybody.
3) okay.

Which is the case? Does any of this even matter on such a small number of records? Would it make a difference if I did it daily?

tl;dr is deleting and reinserting a 5000 record table daily a bad idea? PLEASE I HAVE A MATCH TONIGHT

8/20/2011 1:57:25 PM

Novicane
All American
15416 Posts
user info
edit post

I don't see a problem with batching if its just a few times a week deal where you do it on your own time. Just not sure why your not comfortable is opening up the database. My old database had 14k+ warranty entries for our products, and 20k+ order entries. I would back them up monthly and copy them over to a test server. It took all of like 2 minutes to loginto phpmyadmin and do it. Once everything was backed up to a txt file, with everything, it was still only like 3 MB. Which is crazy to think about it because its years and years of data and order entry.

If you were doing it every 5 minutes or every entry then we'd have some problems.

But its just 5,000 records, to us that seems like a lot but in SQL terms that literally nothing at all to handle.




[Edited on August 21, 2011 at 3:23 PM. Reason : d]

8/21/2011 3:20:05 PM

joepeshi
All American
8094 Posts
user info
edit post

I may be starting a job where I would be a complete novice with this...please bear w/ me!

2/1/2013 1:36:53 AM

Novicane
All American
15416 Posts
user info
edit post

ah memories.

I no longer work with databases and I miss it.

2/1/2013 7:10:42 AM

1985
All American
2175 Posts
user info
edit post

What is the best way to delete a large amount of records from an unindexed table that contains ~ 3 billion rows?

The table cannot be indexed because of size constraints on the DB. I've tried running:

DECLARE @stillgoing bit;
SET @stillgoing = 1;

WHILE @stillgoing = 1
BEGIN
DELETE TOP (10000) DataWarehouse
WHERE fieldname = 'foo'

IF @@ROWCOUNT = 0
SET @stillgoing = 0;

CHECKPOINT
END


But that looks like it will need to run for weeks to remove all the rows that I need to remove.

12/20/2013 1:16:37 PM

skywalkr
All American
6788 Posts
user info
edit post

Any of you guys have recommended resources for SQL for reporting/basic analytics? We use Toad at work and my background is in SAS so I know basic SQL from proc sql but there are a lot of things I want to do and could easily do them in SAS but I have to hunt to find the SQL equivalent. I have a feeling there are a ton of things I could do but I just don't know about them and most of the books I find are more for database analysts and the like.

12/20/2013 1:21:29 PM

lewisje
All American
9196 Posts
user info
edit post

^^well that's what you get for not indexing (sry you couldn't index it)

too bad you can't just DROP TABLE and start over

12/20/2013 7:05:43 PM

Novicane
All American
15416 Posts
user info
edit post

^^ never used toad. I've used SQL yog

12/20/2013 8:21:54 PM

skywalkr
All American
6788 Posts
user info
edit post

It isn't really anything special in terms of syntax, pl sql (oracle). I don't really know the pl part though, I am sure there is plenty there that I could take advantage of but the stuff I have read is a bit more techy than I would like.

12/20/2013 8:33:08 PM

FroshKiller
All American
51911 Posts
user info
edit post

1985 said:
Quote :
"What is the best way to delete a large amount of records from an unindexed table that contains ~ 3 billion rows?

[snip]

The table cannot be indexed because of size constraints on the DB.

But that looks like it will need to run for weeks to remove all the rows that I need to remove"


Well, you ought to fuckin' index it. Add storage, create a new filegroup, create indexes on the new filegroup. Come on, now.

How many records do you need to keep? Could you truncate the table, create your indexes, then do a bulk insert or something from a backup of just the records you wanted to keep?

What version of SQL Server is it?

Where should I mail my invoice?

12/20/2013 10:33:16 PM

afripino
All American
11422 Posts
user info
edit post

^agreed.

[Edited on December 21, 2013 at 8:10 AM. Reason : ]

12/21/2013 8:07:59 AM

Stein
All American
19842 Posts
user info
edit post

1) BCP out
2) Write a script to remove what you want
3) BCP in

12/21/2013 1:41:07 PM

 Message Boards » Tech Talk » SQL query help thread... Page 1 2 3 4 5 [6] 7, Prev Next  
go to top | |
Admin Options : move topic | lock topic

© 2024 by The Wolf Web - All Rights Reserved.
The material located at this site is not endorsed, sponsored or provided by or on behalf of North Carolina State University.
Powered by CrazyWeb v2.39 - our disclaimer.